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

Jms 如何解决Websphere MQ服务器队列读取竞争条件?,jms,ibm-mq,ibm-was,Jms,Ibm Mq,Ibm Was,我有一个运行某些应用程序的4节点WebSphereApplicationServer集群。应用程序侦听WebSphereMQ服务器的队列。我在集群范围内创建了jms资源,因此所有节点都连接到同一个队列管理器,并且在mq资源管理器中,队列的打开输入计数为4。问题是,如果消息发布到队列中,其中一个节点会捕获该消息并开始处理,但它会抛出一个错误,指出消息头不正确。当我关闭3个节点并只运行一个节点时,该节点上的应用程序读取消息并开始正常处理。我认为读争用在mq中不是问题,但事实指向了另一个方向。是否有某

我有一个运行某些应用程序的4节点WebSphereApplicationServer集群。应用程序侦听WebSphereMQ服务器的队列。我在集群范围内创建了jms资源,因此所有节点都连接到同一个队列管理器,并且在mq资源管理器中,队列的打开输入计数为4。问题是,如果消息发布到队列中,其中一个节点会捕获该消息并开始处理,但它会抛出一个错误,指出消息头不正确。当我关闭3个节点并只运行一个节点时,该节点上的应用程序读取消息并开始正常处理。我认为读争用在mq中不是问题,但事实指向了另一个方向。是否有某种方法可以设置队列中的某些属性,如读锁或将消息公平地分发到4个节点的调度程序

如果您使用GET而不是BROWSE来读取syncpoint下的消息,则在发出回滚之前,其他线程无法检索该消息。如果消息可以处理,则在完成后发出提交

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


无论发生什么,都不能归因于对同一消息的线程争用,因为它会以某种方式破坏消息。无论消息是浏览还是破坏性检索,WMQ都能确保调用的完整性和原子操作。要诊断此问题,需要了解有关您看到的确切错误的更多信息,包括链接异常的打印,该异常将包含传输提供程序的本机返回代码。

好的,所以我是个白痴,应用程序需要输入xsd,我只在一个节点的文件系统中输入xsd。所以这不是一个真正的问题。我是否可以通过实现一个调度器来改进设置,该调度器以循环方式将消息发送给所有4个节点??WMQ将循环分发消息,前提是消息的发送速度比任何一个节点都快。然而,为了提高GET请求的效率,GET请求被推到堆栈上,因此当它们缓慢到达时,可能只有一两个线程会处理它们。您可以使用协作浏览功能编写消息分派器来执行循环,但老实说,这似乎不值得这么做。要测试消息分布,请加载一个队列,然后立即将所有消息复制到输入队列。然后您将看到循环行为。