在jms(v1.0)订户客户端ack模式下,message.acknowledge()是将ack发送回服务器(代理)端的唯一方法。实际行为是,如果客户端确认消息3,则消息发送者(代理)客户端确认消息到消息3 [1]。
即 msg1,msg2,msg3按顺序传送给客户端。
在方案1和2中,代理会收到客户端对所有3条消息的ACK的通知。并且客户端实际上还处理所有3和ACK。
请考虑以下情况:
一个。 msg1来到客户端。
湾无法处理msg1。所以避免回来。 (msg1从未处理或从客户端获取)
℃。 msg2到来并成功处理。并确认msg2。
因此在上面的场景中,客户端ack不保证msg1的传递。
请解释一下,当通过JMS 1.0规范通过客户端确认批处理时,是否有保证交付的解决方法。
[1] http://docs.oracle.com/javaee/7/api/javax/jms/Message.html#acknowledge