<div dir="ltr"><div>Disclaimer:  I am new to RabbitMQ.  :-)</div><div><br></div>When processing long running messages, if the connection drops or gets interrupted - the message will be handed to another consumer.<div>Meanwhile, the original consumer is still doing the work.</div><div><br></div><div>I would propose a new option on a queue.</div><div><br></div><div>If the connection is dropped, that would not make the message available to another consumer.</div><div>The message would have a 'processing timeout'.  Only after that time has expired would the message become available to other consumers.</div><div><br></div><div>There would be several different options that could be set on the message for how to determine to deliver the message to another consumer.</div><div><br></div><div>1)  You could have an 'absolute processing timeout'.  </div><div>    -  RabbitMQ would keep track of how long the consumer has had the message.</div><div>    -  The client could send 'keep alive' acknowledgements to reset the the time RabbitMQ is tracking to zero.</div><div>    -  All that matters is has the message been processing longer than the timeout value.  (where timeout can be reset by client).  A dropped connection would not matter. </div><div><br></div><div>2)  You could have a 'broken connection timeout'</div><div><div>    -  RabbitMQ would keep track of how long the consumer has had the message, AFTER the connection is dropped.</div><div>    -  The client would NOT ever need to send 'keep alive' acknowledgements.</div><div>    -  If a consumer connection is re-established - the consumer should somehow indicate they are still working on the message.</div></div><div>    -  Potentially - when the consumer is working on the message, they send 'keep alive' every so often.  This way if the connection broke and was reconnected, the next time a 'keep alive' is sent, it would let RabbitMQ know you are still working on the message.</div><div><br></div><div>The above options would probably have default values at the queue level, and each message could override (for example if you know the message takes a long time to process.)</div><div><br></div><div>This makes it where any intermittent connection from consumer to publisher would not necessarily mean the consumer 'failed' and the message should be passed to another consumer.</div><div><br></div><div><br></div></div>