Hi Max,<div><br></div><div>The problem is that you have only *one* queue.</div><div><br></div><div>"Fanout" not telling an exchange to distribute messages to different consumers, but to different queues. So, you need at least two queues binding to a "fanout" exchange. Then let your two consumers get message from those two queues, one consumer to one queue.<br><br>On Sunday, June 17, 2012 4:27:15 PM UTC+8, Max Beutel wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I am using the AMQP pecl extension (<a href="http://pecl.php.net/package/amqp" target="_blank">http://pecl.php.net/package/<wbr>amqp</a>) for connecting to rabbitMQ from my PHP app. I have the following scripts:<br><br>producer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>$ch = new AMQPChannel($cnn);<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>for ($i = 0; $i &lt; 100; $i++) {<br>&nbsp;&nbsp;&nbsp; $ex-&gt;publish('msg ' . ($i +1), 'routing.key');<br>}<br><br>The producer publishes 100 messages. <br><br>Then I have a consumer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>// Create a channel<br>$ch = new AMQPChannel($cnn);<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>function processMessage($envelope, $queue) {<br>&nbsp;&nbsp;&nbsp; echo "Message $i: " . $envelope-&gt;getBody() . "\n";<br>&nbsp;&nbsp;&nbsp; $queue-&gt;ack($envelope-&gt;<wbr>getDeliveryTag());<br>}<br><br>$q-&gt;consume("processMessage");<br><br>The consumer just writes the messages to stdout and ack´s them. <br><br>I used the exchange type fanout, because I want each message from the producer delivered to each consumer. <br><br>But if I start 2 consumers the output looks like this:<br><br>output consumer1:<br>Message : msg 1<br>Message : msg 3<br>Message : msg 5<br>...<br><br>output consumer2:<br>Message : msg 2<br>Message : msg 4<br>Message : msg 6<br>Message : msg 8<br>...<br><br>It looks like the messages are distributed using round robin or the like, consumer 1 gets message 1, consumer 2 gets message 2 etc. <br><br>Is fanout the wrong exchange for this? Or is something wrong in my setup code?<br>Defining the routing key is probably usesless as this is ignored in fanout anway, right?<br><br></blockquote><br>On Sunday, June 17, 2012 4:27:15 PM UTC+8, Max Beutel wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I am using the AMQP pecl extension (<a href="http://pecl.php.net/package/amqp" target="_blank">http://pecl.php.net/package/<wbr>amqp</a>) for connecting to rabbitMQ from my PHP app. I have the following scripts:<br><br>producer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>$ch = new AMQPChannel($cnn);<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>for ($i = 0; $i &lt; 100; $i++) {<br>&nbsp;&nbsp;&nbsp; $ex-&gt;publish('msg ' . ($i +1), 'routing.key');<br>}<br><br>The producer publishes 100 messages. <br><br>Then I have a consumer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>// Create a channel<br>$ch = new AMQPChannel($cnn);<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>function processMessage($envelope, $queue) {<br>&nbsp;&nbsp;&nbsp; echo "Message $i: " . $envelope-&gt;getBody() . "\n";<br>&nbsp;&nbsp;&nbsp; $queue-&gt;ack($envelope-&gt;<wbr>getDeliveryTag());<br>}<br><br>$q-&gt;consume("processMessage");<br><br>The consumer just writes the messages to stdout and ack´s them. <br><br>I used the exchange type fanout, because I want each message from the producer delivered to each consumer. <br><br>But if I start 2 consumers the output looks like this:<br><br>output consumer1:<br>Message : msg 1<br>Message : msg 3<br>Message : msg 5<br>...<br><br>output consumer2:<br>Message : msg 2<br>Message : msg 4<br>Message : msg 6<br>Message : msg 8<br>...<br><br>It looks like the messages are distributed using round robin or the like, consumer 1 gets message 1, consumer 2 gets message 2 etc. <br><br>Is fanout the wrong exchange for this? Or is something wrong in my setup code?<br>Defining the routing key is probably usesless as this is ignored in fanout anway, right?<br><br></blockquote><br>On Sunday, June 17, 2012 4:27:15 PM UTC+8, Max Beutel wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I am using the AMQP pecl extension (<a href="http://pecl.php.net/package/amqp" target="_blank">http://pecl.php.net/package/<wbr>amqp</a>) for connecting to rabbitMQ from my PHP app. I have the following scripts:<br><br>producer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>$ch = new AMQPChannel($cnn);<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>for ($i = 0; $i &lt; 100; $i++) {<br>&nbsp;&nbsp;&nbsp; $ex-&gt;publish('msg ' . ($i +1), 'routing.key');<br>}<br><br>The producer publishes 100 messages. <br><br>Then I have a consumer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>// Create a channel<br>$ch = new AMQPChannel($cnn);<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>function processMessage($envelope, $queue) {<br>&nbsp;&nbsp;&nbsp; echo "Message $i: " . $envelope-&gt;getBody() . "\n";<br>&nbsp;&nbsp;&nbsp; $queue-&gt;ack($envelope-&gt;<wbr>getDeliveryTag());<br>}<br><br>$q-&gt;consume("processMessage");<br><br>The consumer just writes the messages to stdout and ack´s them. <br><br>I used the exchange type fanout, because I want each message from the producer delivered to each consumer. <br><br>But if I start 2 consumers the output looks like this:<br><br>output consumer1:<br>Message : msg 1<br>Message : msg 3<br>Message : msg 5<br>...<br><br>output consumer2:<br>Message : msg 2<br>Message : msg 4<br>Message : msg 6<br>Message : msg 8<br>...<br><br>It looks like the messages are distributed using round robin or the like, consumer 1 gets message 1, consumer 2 gets message 2 etc. <br><br>Is fanout the wrong exchange for this? Or is something wrong in my setup code?<br>Defining the routing key is probably usesless as this is ignored in fanout anway, right?<br><br></blockquote><br>On Sunday, June 17, 2012 4:27:15 PM UTC+8, Max Beutel wrote:<blockquote class="gmail_quote" style="margin: 0;margin-left: 0.8ex;border-left: 1px #ccc solid;padding-left: 1ex;">I am using the AMQP pecl extension (<a href="http://pecl.php.net/package/amqp" target="_blank">http://pecl.php.net/package/<wbr>amqp</a>) for connecting to rabbitMQ from my PHP app. I have the following scripts:<br><br>producer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>$ch = new AMQPChannel($cnn);<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>for ($i = 0; $i &lt; 100; $i++) {<br>&nbsp;&nbsp;&nbsp; $ex-&gt;publish('msg ' . ($i +1), 'routing.key');<br>}<br><br>The producer publishes 100 messages. <br><br>Then I have a consumer.php:<br><br>$cnn = new AMQPConnection();<br>$cnn-&gt;connect();<br><br>// Create a channel<br>$ch = new AMQPChannel($cnn);<br><br>$q = new AMQPQueue($ch);<br>$q-&gt;setName('test1243');<br>$q-&gt;setFlags(AMQP_DURABLE);<br>$q-&gt;declare();<br>$q-&gt;bind('ex2', 'routing.key');<br><br>$ex = new AMQPExchange($ch);<br>$ex-&gt;setName('ex2');<br>$ex-&gt;setType(AMQP_EX_TYPE_<wbr>FANOUT);<br>$ex-&gt;declare();<br><br>function processMessage($envelope, $queue) {<br>&nbsp;&nbsp;&nbsp; echo "Message $i: " . $envelope-&gt;getBody() . "\n";<br>&nbsp;&nbsp;&nbsp; $queue-&gt;ack($envelope-&gt;<wbr>getDeliveryTag());<br>}<br><br>$q-&gt;consume("processMessage");<br><br>The consumer just writes the messages to stdout and ack´s them. <br><br>I used the exchange type fanout, because I want each message from the producer delivered to each consumer. <br><br>But if I start 2 consumers the output looks like this:<br><br>output consumer1:<br>Message : msg 1<br>Message : msg 3<br>Message : msg 5<br>...<br><br>output consumer2:<br>Message : msg 2<br>Message : msg 4<br>Message : msg 6<br>Message : msg 8<br>...<br><br>It looks like the messages are distributed using round robin or the like, consumer 1 gets message 1, consumer 2 gets message 2 etc. <br><br>Is fanout the wrong exchange for this? Or is something wrong in my setup code?<br>Defining the routing key is probably usesless as this is ignored in fanout anway, right?<br><br></blockquote></div>