Hello Steve/Alex,<div><br></div><div>Thanks a lot for the help. It&#39;s pretty clear now.</div><div>So basically for a queue, as long as there is going to be only one consumer, it hardly matters if ThreadPool with com.rabbitmq.client.Connection underneath the channel has 1 thread or many threads.</div>
<div>Well, having more threads will help if same channel is going to be used to consume messages from other queues.<br><br>regards, Yogesh</div><div><br><div class="gmail_quote">2012/1/23 Steve Powell <span dir="ltr">&lt;<a href="mailto:steve@rabbitmq.com">steve@rabbitmq.com</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word">Hi Yogesh,<div><br></div><div><div>What Alex says is perfectly correct.</div><div><br>
</div><div>The executor service is set on the connection, and is there to allow multiple</div><div>channels to execute consumers simultaneously, and without blocking the channel</div><div>thread. By default you get an executor service which has five threads.</div>
<div><br></div><div>From the point of view of a single channel, the consumers are driven serially,</div><div>one delivery at a time, upon one of the executor service threads. The same</div><div>thread is not guaranteed to be used each time for each consumer call for a</div>
<div>channel (so don&#39;t try to use ThreadLocal objects).</div><div><br></div><div>The reason we provide this, is so that clients with many, many channels are not</div><div>forced to have a Consumer thread per channel -- something that is quite</div>
<div>expensive -- but have the option of allocating as many threads as they wish if</div><div>they need it. At the same time we guarantee that no Consumer calls can</div><div>&#39;overtake&#39; each other on any one channel, and that Consumer processing runs on a</div>
<div>distinct thread from the channel and the app, so that channel calls in the</div><div>Consumer code will not deadlock.</div></div><div><br></div><div>I hope this clarifies rather than obscures the situation,</div><div>
<br></div><div>Regards,</div><div><span class="HOEnZb"><font color="#888888"><div>
<div style="word-wrap:break-word"><div style="font-weight:normal;word-wrap:break-word"><div><div style="font-style:normal"><div><font size="3"><span style="font-size:12px">Steve Powell  </span><span style="font-size:11px">(<i>a hoppy bunny</i>)</span></font></div>
</div><div><font size="3"><span style="font-size:11px"><div style="font-style:normal;font-family:Helvetica;font-size:12px"><i><font face="Georgia"><span style="font-size:10px">----------some more definitions from the SPD----------</span></font></i></div>
<div style="font-family:Helvetica;font-size:12px"><font face="Georgia"><span style="font-style:normal;font-size:10px"><b>vermin</b> (</span><font><span style="font-size:10px"><i>v.</i>)</span></font><span style="font-style:normal;font-size:10px"> Treating the dachshund for roundworm.</span></font></div>
</span></font></div></div></div><span style="font-weight:normal;font-family:Helvetica;font-size:12px"><font face="Georgia" size="2" style="font-style:normal"><span style="font-size:10px"><b>chinchilla</b> (</span></font><font face="Georgia"><span style="font-size:10px"><i>n.</i>) Cooling device for the lower jaw.</span></font></span><div>
<span style="text-indent:0px;letter-spacing:normal;font-variant:normal;text-align:-webkit-auto;font-style:normal;font-weight:normal;line-height:normal;border-collapse:separate;text-transform:none;font-size:medium;white-space:normal;font-family:Georgia;word-spacing:0px"></span><span style="line-height:normal;text-indent:0px;border-collapse:separate;letter-spacing:normal;text-align:-webkit-auto;font-variant:normal;text-transform:none;white-space:normal;word-spacing:0px"><span style="font-family:Georgia;font-weight:normal;font-style:normal;font-size:10px"><b>socialcast</b></span><span style="font-family:Georgia;font-weight:normal;font-style:normal;font-size:10px"> (</span><span style="font-family:Georgia;font-weight:normal;font-size:10px"><i>n.</i>)</span><span style="font-family:Georgia;font-weight:normal;font-style:normal;font-size:10px"> Someone to whom everyone is speaking but nobody likes.</span></span></div>
</div>
</div></font></span><div><div class="h5">
<br><div><div>On 23 Jan 2012, at 15:22, Alexandru Scvorţov wrote:</div><br><blockquote type="cite"><div><blockquote type="cite">Is my understanding correct?<br></blockquote><br>Almost.  Deliveries will happen serially on a channel, so, as long as you<br>
only have one consumer, everything should be fine.<br><br>On Mon, Jan 23, 2012 at 06:54:15AM -0800, Yogesh Ketkar wrote:<br><blockquote type="cite">Hello Alex,<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">
I thought, using default Connection con = factory.newConnection(),<br></blockquote><blockquote type="cite">ThreadPool which gets created will have more than one thread and<br></blockquote><blockquote type="cite">calling basicConsume will result in processing of messages on multiple<br>
</blockquote><blockquote type="cite">threads.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">But if we explicitly provide Executors.newSingleThreadExecutor() to<br></blockquote><blockquote type="cite">
newConnection method, only single thread will come into play with<br></blockquote><blockquote type="cite">basicConsume.<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">Is my understanding correct?<br>
</blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">regards, Yogesh<br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite"><br></blockquote><blockquote type="cite">On Jan 23, 7:48 pm, Alexandru Scvorţov &lt;<a href="mailto:alexan...@rabbitmq.com" target="_blank">alexan...@rabbitmq.com</a>&gt; wrote:<br>
</blockquote><blockquote type="cite"><blockquote type="cite">Hi Yogesh,<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite">using channel.basicConsume on the channel which is created like this<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">ExecutorService es = Executors.newSingleThreadExecutor();<br>
</blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Connection connection = factory.newConnection(es);<br></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite">final Channel channel = connection.createChannel();<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite">is probably a better approach.<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Any comments on this?<br></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">I don&#39;t quite see the point of the ExecutorService.<br></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Just doing this:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Connection connection = factory.newConnection(es);<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite">final Channel channel = connection.createChannel();<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
Then, calling basicConsume with your own subclass of DefaultConsumer<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">should be fine.<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Cheers,<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">Alex<br></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite">On Mon, Jan 23, 2012 at 08:08:37PM +0530, Yogesh Ketkar wrote:<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Thanks Alex.<br></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">I think, for sequential message processing, rather than this pattern<br>
</blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">while(true) {<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
    GetResponse res = channel.basicGet(QUEUE_NAME, false);<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">    if(res != null) {<br></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">        // process and ack message<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
   }<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">}<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">using channel.basicConsume on the channel which is created like this<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite">ExecutorService es = Executors.newSingleThreadExecutor();<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Connection connection = factory.newConnection(es);<br>
</blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">final Channel channel = connection.createChannel();<br></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">is probably a better approach.<br></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite">Any comments on this?<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite">regards, Yogesh<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
2012/1/23 Alexandru Scvorţov &lt;<a href="mailto:alexan...@rabbitmq.com" target="_blank">alexan...@rabbitmq.com</a>&gt;<br></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Hi Yogesh,<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">In the absence of consumer failures, RabbitMQ will deliver messages from<br></blockquote></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">a queue in order.<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">So, if messages 1, 2, 3 reach a queue in order, RabbitMQ will deliver<br></blockquote></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">them to consumers in the same order (1, 2, 3).<br></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">But, if consumers fail before acknowledging the messages (or if they<br>
</blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">reject the messages), those messages will requeued at the end of the<br></blockquote>
</blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">queue.  So, if the consumer that got message 1 rejects it, the new<br></blockquote></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">order of messages will be 2, 3, 1.<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">This all deals with message *delivery*.<br></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">There are multiple consumer threads consuming the messages.<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Though multiple threads are consuming the messages, I observed that<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">messages still get processed sequentially.<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Is that the case and if NOT, what is the way to guarantee sequential<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">processing of messages on one queue?<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
The library makes no guarantees about the order in which you process<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">messages, only about the order in which they&#39;re delivered.<br>
</blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
If you want to process all the messages on a queue in order, only<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">consume from one thread (doing basic.get from one thread like you<br>
</blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">suggested in the other email would work, but would also be highly<br></blockquote>
</blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">inefficient).<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Does this answer your question?<br></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Cheers,<br></blockquote></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Alex<br></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">On Sun, Jan 22, 2012 at 09:38:40AM -0800, Yogesh Ketkar wrote:<br></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Running the code below, gives<br></blockquote></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">channel.basicConsume(QUEUE_NAME, autoAck, CONSUMER_TAG,<br></blockquote></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">      new DefaultConsumer(channel)  {<br></blockquote></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">        @Override<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">        public void handleDelivery(String consumerTag, Envelope<br></blockquote></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">envelope, BasicProperties properties, byte[] body) {<br></blockquote></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">                System.out.println(Thread.currentThread().getName());<br></blockquote></blockquote>
</blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">         }<br></blockquote></blockquote></blockquote></blockquote>
</blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">}<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">o/p like<br></blockquote></blockquote></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">pool-1-thread-1<br></blockquote></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">pool-1-thread-2<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">pool-1-thread-3<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite">etc<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote>
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">There are multiple consumer threads consuming the messages.<br></blockquote></blockquote></blockquote>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Though multiple threads are consuming the messages, I observed that<br></blockquote>
</blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">messages still get processed sequentially.<br></blockquote>
</blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">Is that the case and if NOT, what is the way to guarantee sequential<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">processing of messages on one queue?<br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite">regards, Yogesh<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite">_______________________________________________<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite">rabbitmq-discuss mailing list<br></blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><blockquote type="cite">
<blockquote type="cite"><blockquote type="cite"><a href="mailto:rabbitmq-disc...@lists.rabbitmq.com" target="_blank">rabbitmq-disc...@lists.rabbitmq.com</a><br></blockquote></blockquote></blockquote></blockquote></blockquote>
<blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><blockquote type="cite"><a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
</blockquote></blockquote></blockquote></blockquote></blockquote><blockquote type="cite"><blockquote type="cite"><br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">_______________________________________________<br>
</blockquote></blockquote><blockquote type="cite"><blockquote type="cite">rabbitmq-discuss mailing list<br></blockquote></blockquote><blockquote type="cite"><blockquote type="cite">rabbitmq-disc...@lists.rabbitmq.comhttps://<a href="http://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
</blockquote></blockquote><blockquote type="cite">_______________________________________________<br></blockquote><blockquote type="cite">rabbitmq-discuss mailing list<br></blockquote><blockquote type="cite"><a href="mailto:rabbitmq-discuss@lists.rabbitmq.com" target="_blank">rabbitmq-discuss@lists.rabbitmq.com</a><br>
</blockquote><blockquote type="cite"><a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br></blockquote>
_______________________________________________<br>rabbitmq-discuss mailing list<br><a href="mailto:rabbitmq-discuss@lists.rabbitmq.com" target="_blank">rabbitmq-discuss@lists.rabbitmq.com</a><br><a href="https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss" target="_blank">https://lists.rabbitmq.com/cgi-bin/mailman/listinfo/rabbitmq-discuss</a><br>
</div></blockquote></div><br></div></div></div></div></blockquote></div><br></div>