Contenu connexe Similaire à Practical Message Queueing using RabbitMQ (Nomad PHP EU Dec 2014) (20) Plus de James Titcumb (20) Practical Message Queueing using RabbitMQ (Nomad PHP EU Dec 2014)13. ● add apt repo
○ deb http://www.rabbitmq.com/debian/ testing main
● add signing key
○ http://www.rabbitmq.com/rabbitmq-signing-key-public.asc
● apt-get update
● apt-get install rabbitmq-server
● rabbitmq-plugins enable rabbitmq_management
● sudo service rabbitmq-server restart
Using Apt
22. Please wait, connecting...
1 use PhpAmqpLibConnectionAMQPConnection;
2
3 $connection = new AMQPConnection(
4 'localhost',
5 5672,
6 'guest',
7 'guest',
8 '/'
9 );
10 $channel = $connection->channel();
24. basic/consumer.php
1 $channel->basic_consume(
2 'test_queue', // Queue to consume
3 '', // Consumer identifier
4 false,
5 true, // No-ack means messages are "auto acknowledged"
6 false, // Exclusive - no other consumers can use the queue
7 false,
8 function(AMQPMessage $message) {
9 echo $message->body . "n";
10 }
11 );
12
13 while (count($channel->callbacks)) {
14 $channel->wait();
15 }
28. 1 use PhpAmqpLibMessageAMQPMessage;
2
3 $channel->exchange_declare(
4 'test_exchange',
5 'fanout',
6 false,
7 false,
8 false);
9
10 $message = new AMQPMessage('my test message #' . $id);
11 $channel->basic_publish($message, 'test_exchange');
fanout/producer.php
29. fanout/consumer.php
1 $q = $channel->queue_declare(
2 '', // Lets RabbitMQ pick a name for queue
3 false, false, false,
4 true // Delete this queue
5 );
6 $queue_name = $q[0];
7
8 $channel->exchange_declare(
9 'test_exchange', 'fanout', false, false, false);
10 $channel->queue_bind($queue_name, 'test_exchange');
31. A word on Temporary Queues
test_exchangeProducer
Messages
go nowhere
38. direct/consumer.php
1 $q = $channel->queue_declare('', false, false, false, true);
2 $queue_name = $q[0];
3 $channel->exchange_declare(
4 'test_direct', 'direct', false, false, false);
5
6 // Bind for each routing key we want (BINDING KEY)
7 $channel->queue_bind($queue_name, 'test_direct', 'apple');
8 $channel->queue_bind($queue_name, 'test_direct', 'orange');
9 $channel->queue_bind($queue_name, 'test_direct', 'banana');
63. Creating a cluster
node1$ rabbitmqctl cluster_status
Cluster status of node rabbit@node1 ...
[{nodes,[{disc,[rabbit@node1]}]},{running_nodes,[rabbit@node1]}]
...done.
node2$ rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node2]}]},{running_nodes,[rabbit@node2]}]
...done.
node3$ rabbitmqctl cluster_status
Cluster status of node rabbit@node3 ...
[{nodes,[{disc,[rabbit@node3]}]},{running_nodes,[rabbit@node3]}]
...done.
64. node2$ rabbitmqctl join_cluster --ram rabbit@node1
node3$ rabbitmqctl join_cluster rabbit@node2
node3$ rabbitmqctl cluster_status
Cluster status of node rabbit@node3 ...
[{nodes,[{disc,[rabbit@node3,rabbit@node1]},{ram,[rabbit@node2]}]},
{running_nodes,[rabbit@node2,rabbit@node1,rabbit@node3]}]
...done.
Creating a cluster
66. node1$ rabbitmqctl stop_app
node2$ rabbitmqctl forget_cluster_node rabbit@node1
node1$ rabbitmqctl reset
node1$ rabbitmqctl start_app
node2$ rabbitmqctl cluster_status
Cluster status of node rabbit@node2 ...
[{nodes,[{disc,[rabbit@node3]},{ram,[rabbit@node2]}]},
{running_nodes,[rabbit@node2,rabbit@node3]}]
...done.
Removing Nodes
68. HA + Queue Mirroring
RabbitMQ
Node 1
RabbitMQ
Node 2
Load Balance / Floating IP / Low TTL DNS etc.