Sun Java System Message Queue 3.7 UR1 管理指南

消息无法到达使用方

症状:

可能的原因:

可能的原因:限制行为导致消息在代理上被删除。

如果目的地内存中的消息数或消息字节数达到了配置限制,代理将尝试节省内存资源。当达到限制时,代理将采用下列三个可配置的行为,从而导致消息丢失:

确认问题的起因:检查停用消息队列,如停用消息队列包含消息中所述。具体地说,是使用“消息的数目或者其大小超出目的地限制”中的说明。查找 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"。将出现如下所示的列表:

QBrowser 显示 mq.sys.dmq 的消息。每条消息都包括编号、时间戳、类型、模式以及优先级。

双击消息可显示该消息的详细信息:

消息详细信息窗口。顶部窗格显示消息;中间窗格显示其属性;底部窗格包含消息。

请注意消息的 JMS_SUN_DMQ_UNDELIVERED_REASON 属性值是否为 EXPIRED

解决此问题:联系应用程序开发者,请他们提高生存时间值。

可能的原因:时钟不同步。

如果时钟之间不同步,则代理对消息生命周期的计算可能有错误,从而导致消息超过它们的到期时间而被删除。

确认问题的起因:在代理日志文件中,查找下列任一消息:B2102B2103B2104。这些消息均报告检测到可能的时钟脉冲相位差。

解决此问题:检查您是否正在运行时间同步程序,如准备系统资源中所述。

可能的原因:使用方客户端未能在某个连接上启动消息传送。

除非客户端代码建立了连接,并在该连接上启动了消息传送,否则消息将无法传送。

确认问题的起因:检查客户端代码是否能建立连接并启动消息传送。

解决此问题:重写客户端代码,以建立连接并启动消息传送。