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.

  1. client process messages ack every message, msg1, msg2 , msg3. >> ok
  2. 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:

  1. tear down session (or connection).

  2. invoke recover on session. restart message delivery oldest unacknowledged message.


Comments

Popular posts from this blog

routing - AngularJS State management ->load multiple states in one page -

python - GRASS parser() error -

Swift game error message -