Client Acknowledgement & Unacked messages
I have a consumer application using client acknowledgement mode. If the application fails to process the message and therefor does not acknowledge it, will it get redelivered after some time period? If so, what is the delay?
Comments
-
Hello @petegehrman, Short answer is No (but pl continue to read :-)). Messages are not redelivered on the application layer. They will be redelivered only if the connection (flow to be exact) is reestablished.
Now to the long answer .. Solace does redeliver the messages on the transport level. Purpose of this is to ensure that the messages are delivered to the application buffer. From then on, its application's responsibility to process them and ack. Redelivering beyond that point will lead to duplicate messages on the consumer end - which will be in violation of several protocols including JMS.
When the application flow is reestablished, any unacked messages can be safely redelivered since we know the original flow it was delivered to can no longer ack the message (and lead to potential dup message delivery). This is still subject to other parameters like max-time-to-live, max-redelivery, max-delivered-unacked-msgs, etc.
Here are some related threads you may find useful :
https://solace.community/discussion/156/receive-all-unacknowledged-messages-using-the-net-api
https://solace.community/discussion/301/reprocess-messages-which-are-not-ack-back-by-consumer1 -
Thanks. To confirm that I understood you ... if my application dies and therefor the flow terminates, any unacked messages will get redelivered either to that consumer or another (if the queue is non-exclusive). However, if the application continues to run and the flow stays open then unacked messages will not get redelivered.
6 -
You got that right @petegehrman
1