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