<div dir="ltr"><div><br></div> <br><div><br><div class="gmail_extra"><br><br><div class="gmail_quote">On Thu, Oct 31, 2013 at 5:36 PM, Emile Joubert <span dir="ltr"><<a href="mailto:emile@rabbitmq.com" target="_blank">emile@rabbitmq.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><br>
Hi,<br>
<br>
On 31/10/13 07:46, Liong Hung Wong wrote:<br>
<br>
> When I switch my network connection from one wifi router to another, two<br>
> consumers are created for the queue as below. In that case, messages<br>
> will be distributed between both consumers, hence, the app only receives<br>
> alternate message until the first connection timeout due to heartbeat<br>
> setting.<br>
<br>
If you want to ensure that only one consumer can get messages from a<br>
queue then set the exclusive flag.<br>
<br></blockquote><div><br>If I set the queue exclusive flag, the new connection/channel can not be
attached to the queue until the first connection timeout. The queue is a permanent queue so that the
client doesn't miss any message published to the queue when the client
is offline.<br><br> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
> I am not able to cancel the first consumer with<br>
> channel.basicCancel(consumerTag) when as the connection has already been<br>
> closed. Is there any way to overcome this problem?<br>
<br>
This should not be a problem. If the connection of one consumer has<br>
already closed by the time the second consumer opened then there will be<br>
no overlap in subscriptions. If consumers subscribe without autoAck then<br>
unacknowledged messages will be returned to the queue when a connection<br>
terminates, and any subsequent consumer will be able to process such<br>
messages.<br>
<span class=""><font color="#888888"><br>
<br></font></span></blockquote><div>The first connection has not been closed on the server although it has been closed on the client side (the close command doesn't get sent to the server as the network connection is already down). The first connection on the server only gets closed after heartbeat timeout (default 600s). <br>
</div><div><br></div><div>During the 600s, M1, M2, M3 and M4 published to the queue. New connection only get M2, and M4 during the 600s. After the first connection closed, the new connection/channel gets M1 and M3. What I want to achieve is to be able to get all of the messages in real-time. <br>
</div><div><br></div><div><br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span class=""><font color="#888888">
<br>
-Emile<br>
<br>
<br>
<br>
<br>
</font></span></blockquote></div><br></div></div></div>