JMS客户端的JVM崩溃 - CLIENT ACKNOWLEDGE模式

时间:2016-01-24 11:22:16

标签: java jms ibm-mq

假设JMS消息到达JMS客户端接收器中的onMessage方法。 Broker(IBM MQ)在其他JVM上。就在那之后 - JMS客户端的JVM崩溃了(在做出ACKNOWLEDGE之前)。

我正在使用CLIENT ACKNOWLEDGE。没有交易。

当客户端崩溃时,代理是否会获得异常(什么异常?)? 邮件会留在队列中吗? 该消息是否会重新发送以及何时/如何?

1 个答案:

答案 0 :(得分:1)

首先,IBM MQ不在JVM中运行。 IBM MQ队列管理器运行时包含一堆协调进程。

队列管理器进程确实识别客户端应用程序的终止并进行清理。

当使用CLIENT_ACKNOWLEDGE模式时,IBM MQ JMS客户端从SYNC_POINT下的队列中检索消息,因此在应用程序确认消息之前,不会从队列中删除消息。应用程序恢复时将重新传递该消息,即调用connection.start()方法。但是,如果回退计数超过回退阈值(BOTHRESH),则不会将消息重新传递给应用程序。在这种情况下,如果定义,消息将被移动到回退队列(BOQNAME)。如果由于某种原因消息无法移动到退出队列,则消息将被移动到队列管理器上定义的死信队列(DLQ)。