java - How guaranteed delivery works in JMS client acknowledgment mode? -
in jms (v1.0) subscriber client ack mode, message.acknowledge() way send ack server(broker) side. actual behaviour if client ack message3 message sender(broker) client acks messages message3[1].
i.e msg1, msg2, msg3 delivered client in order.
- client process messages ack every message, msg1, msg2 , msg3. >> ok
- knowing actual behaviour client acks batches(batch size=3), asks msg3 > ok (all messages upto msg3 acked)
in scenario 1 , 2, broker notified client ack 3 messages delivered. , client process 3 , ack back.
consider following scenario :
a. msg1 comes client.
b. failed process msg1. avoid ack back. (msg1 never processed or acked client side)
c. msg2 comes , processed. , ack msg2.
therefore in above scenario client ack not guarantee delivery of msg1.
please explain there workaround guaranteed delivery when batch process client ack through jms 1.0 spec.
[1] http://docs.oracle.com/javaee/7/api/javax/jms/message.html#acknowledge
according spec:
by invoking acknowledge on consumed message, client acknowledges messages consumed session message delivered to.
so, deal not acknowledge more messages in session message has failed.
instead, if detect failure, either:
Comments
Post a Comment