症状:
使用方未收到生成方发送的消息。
可能的原因:
可能的原因:限制行为导致消息在代理上被删除。
如果目的地内存中的消息数或消息字节数达到了配置限制,代理将尝试节省内存资源。当达到限制时,代理将采用下列三个可配置的行为,从而导致消息丢失:
REMOVE_OLDEST:删除最旧的消息。
REMOVE_LOW_PRIORITY:根据消息的存留期删除优先级最低的消息。
REJECT_NEWEST:拒绝新的持久性消息。
确认问题的起因:检查停用消息队列,如停用消息队列包含消息中所述。具体地说,是使用“消息的数目或者其大小超出目的地限制”中的说明。查找 REMOVE_OLDEST 或 REMOVE_LOW_PRIORITY 原因。
解决此问题:增加目的地限制。例如:
imqcmd update dst -n MyDest - o maxNumMsgs=1000
可能的原因:消息超时值即将到期。
代理将删除超时值已过期的消息。如果目的地上完全堆满了消息,生存时间值过短的消息将被删除。
确认问题的起因:使用 QBrowser 演示应用程序来查看停用消息队列内容并查看消息是否超时。要了解 QBrowser 演示程序特定于平台的位置,请参见附录 A, Message QueueTM 数据在特定平台上的位置并查看“示例应用程序和位置”表。
下面是 Windows 平台中的一个调用示例:
cd \MessageQueue3\demo\applications\qbrowser java QBrowser
QBrowser 主窗口出现后,选择队列名称 mq.sys.dmq,然后单击 "Browse"。将出现如下所示的列表:
双击消息可显示该消息的详细信息:
请注意消息的 JMS_SUN_DMQ_UNDELIVERED_REASON 属性值是否为 EXPIRED。
解决此问题:联系应用程序开发者,请他们提高生存时间值。
可能的原因:时钟不同步。
如果时钟之间不同步,则代理对消息生命周期的计算可能有错误,从而导致消息超过它们的到期时间而被删除。
确认问题的起因:在代理日志文件中,查找下列任一消息:B2102、B2103、B2104。这些消息均报告检测到可能的时钟脉冲相位差。
解决此问题:检查您是否正在运行时间同步程序,如准备系统资源中所述。
可能的原因:使用方客户端未能在某个连接上启动消息传送。
除非客户端代码建立了连接,并在该连接上启动了消息传送,否则消息将无法传送。
确认问题的起因:检查客户端代码是否能建立连接并启动消息传送。
解决此问题:重写客户端代码,以建立连接并启动消息传送。