保证交付如何在 JMS 客户端确认模式下工作?
How guaranteed delivery works in JMS client acknowledgment mode?
在 jms (v1.0) subscriber client ack 模式中,message.acknowledge() 是将 ack 发送回服务器(代理)端的唯一方法。实际行为是,如果客户端确认 message3,则消息发送者(代理)客户端确认直到 message3[1] 的所有消息。
即
msg1, msg2, msg3 按顺序发送给客户端。
- 客户端处理每条消息 msg1、msg2 和 msg3 的消息 ACK。 >> 好的
- 知道客户端批量确认的实际行为(批量大小=3),因此要求 msg3 > OK(确认 msg3 之前的所有消息)
在场景 1 和场景 2 中,代理收到通知,客户端确认了所有已发送的 3 条消息。并且客户端实际上也处理了所有 3 和 ACK。
考虑以下场景:
一个。 msg1 到达客户端。
b。无法处理 msg1。所以避免 ack 返回。 (msg1 从未从客户端处理或确认)
c。 msg2 出现并成功处理。并确认 msg2.
因此在上述场景中客户端ack不保证msg1的传递。
请说明在通过 JMS 1.0 规范与客户端确认进行批处理时是否有保证交付的解决方法。
[1] http://docs.oracle.com/javaee/7/api/javax/jms/Message.html#acknowledge
在 jms (v1.0) subscriber client ack 模式中,message.acknowledge() 是将 ack 发送回服务器(代理)端的唯一方法。实际行为是,如果客户端确认 message3,则消息发送者(代理)客户端确认直到 message3[1] 的所有消息。
即 msg1, msg2, msg3 按顺序发送给客户端。
- 客户端处理每条消息 msg1、msg2 和 msg3 的消息 ACK。 >> 好的
- 知道客户端批量确认的实际行为(批量大小=3),因此要求 msg3 > OK(确认 msg3 之前的所有消息)
在场景 1 和场景 2 中,代理收到通知,客户端确认了所有已发送的 3 条消息。并且客户端实际上也处理了所有 3 和 ACK。
考虑以下场景:
一个。 msg1 到达客户端。
b。无法处理 msg1。所以避免 ack 返回。 (msg1 从未从客户端处理或确认)
c。 msg2 出现并成功处理。并确认 msg2.
因此在上述场景中客户端ack不保证msg1的传递。
请说明在通过 JMS 1.0 规范与客户端确认进行批处理时是否有保证交付的解决方法。
[1] http://docs.oracle.com/javaee/7/api/javax/jms/Message.html#acknowledge