如何解决Websphere MQ服务器队列读取竞争条件?

时间:2013-08-23 05:22:17

标签: jms ibm-mq ibm-was

我有一个运行某个应用程序的4节点websphere应用服务器集群。应用程序侦听websphere mq服务器的队列。我已在集群作用域中创建了jms资源,因此所有节点都连接到同一个队列管理器,并且mq资源管理器中队列的打开输入计数为4。问题是如果消息发布到队列,其中一个节点抓取消息并开始处理,但它会抛出错误消息标题不正确。当我关闭3个节点并且只保持一个节点运行时,该节点上的应用程序读取该消息并开始处理就好了。我认为读取争用在mq中不是问题,但事实指向了另一个方向。有没有办法在队列中设置一些属性,如读锁或类似调度程序,将消息公平地分配给4个节点?

1 个答案:

答案 0 :(得分:0)

如果您使用GET而非BROWSE阅读同步点下的消息,则除非发出ROLLBACK,否则任何其他线程都无法检索该消息。如果邮件处理正常,则完成后发出COMMIT

另一方面,如果您BROWSE消息,则所有线程都可以检索相同的消息。

无论发生什么事情都不能归因于对同一消息的线程争用以某种方式破坏消息。无论是浏览消息还是破坏性地检索消息,WMQ都会确保呼叫的完整性和原子操作。要诊断这一点,有必要获得有关您所看到的确切错误的更多信息,包括链接异常的打印,其中包含传输提供程序的本机返回代码。