假设一条JMS消息到达JMS客户端接收器中的onMessage方法。代理(IBM MQ)在其他JVM上。紧接着,JMS客户端的JVM崩溃了(在做出ACKNOWLEDGE之前)。
我正在使用CLIENT ACKNOWLEDGE。不交易。
客户端崩溃时,代理是否会获得异常(什么异常?)?
消息会保留在队列中吗?
邮件会重新发送吗?何时/如何发送?
最佳答案
首先,IBM MQ不在JVM中运行。 IBM MQ队列管理器运行时包含许多协调的流程。
队列管理器进程确实会识别客户端应用程序的终止并进行清理。
使用CLIENT_ACKNOWLEDGE模式时,IBM MQ JMS客户机从SYNC_POINT下的队列中检索消息,因此直到应用程序确认该消息后,该消息才从队列中除去。当应用程序恢复时,即调用connection.start()方法时,该消息将重新发送。但是,如果消息的“回退”计数超过“回退”阈值(BOTHRESH),则不会将其重新传递给应用程序。在这种情况下,如果已定义,则消息将被移至退出队列(BOQNAME)。如果由于某种原因无法将消息移至退出队列,则该消息将移至队列管理器上定义的死信队列(DLQ)。