2011-03-31 90 views
1

我们使用IBM WebSphere MQ作为SWIFT消息。收到SWIFT消息后,会在处理过程中处理并放入本地队列。它像如下:MQ消息被延迟几天

外面世界> Q1>应用程序> Q2>应用程序> Q3>应用

的队列是本地队列。但是,如果消息从Q1/Q2/Q3到达应用程序,就会有相当长的延迟......就像几天一样。这是任意发生的。我们不知道为什么会发生这种情况。大部分消息都很快得到,但在3-4天内有一​​些消息迟到。

所有这些都发生在一个事务中,我们使用Atomikos作为事务管理器。

以前有人遇到过类似的问题吗?任何帮助表示赞赏。

谢谢, Midhun。

回答

1

有许多方式可以延迟WebSphere MQ消息,并且诊断可能需要一些检测工作。以下是一些常见原因:

  1. 消息卡在同步点之下。虽然几天来一次消息处于同步点不太常见,但我已经看到它发生了。问题在于某些应用程序被设计为在单个事务中批量处理多条消息,并且当消息没有以批次为单位到达时,剩余的消息将等待另一条消息到达并关闭批处理。
  2. 消息卡在同步点。在另一种情况下,程序逻辑在读取下一条消息之前不会提交同步点。当多个线程正在处理消息时,负载的分配在所有线程中不一定是均匀的,并且如果负载较轻,则可以使消息分配不足。
  3. 通过浏览孤立的消息。在这种情况下,消息以比当前浏览光标更高的优先级到达。如果重新扫描间隔设置得非常高且流量也很高,则浏览光标重置为队列顶部可能需要一段时间。
  4. 程序错误。你没有提及你正在使用的WMQ客户端和服务器的版本(希望这两个版本都是7.0),但偶尔会有问题导致线程挂起。这些可以在同步点下绑定一条消息。查看latest FixPack for your version并检查名为“在...中修复的问题”的链接以查看APAR是否解决您的特定问题始终是个好主意。如果是这样,请应用最新的修订包。

要启动诊断此,使用DIS QSTATUS命令来显示输入的数目和输出处理队列,该消息年龄和工作中的任优秀单位。您也可以使用SupportPac MA0W中的出口来获取给定队列上所有API调用的人类可读踪迹。这可能是一个非常有价值的诊断工具,因为您可以确切地知道消息在同步点之下有多长时间,它是否正在持续退出并重新读取,API调用使用了哪些选项等。您甚至可以限制跟踪到特定的队列或特定的线程,如果您需要让它运行一段时间,这些线程会很有帮助。