我有一个侦听WebSphere MQ的MDB。它不会按队列接收的顺序获取消息。我如何让它按顺序读取?可能吗?我应该不使用MDB吗?
答案 0 :(得分:5)
通常,WMQ按照收到的顺序发送消息。但是,有几件事可能会影响......
因此,当MDB无序接收消息时,这些东西中的任何一个,或者甚至是其中的几个,都可能是原因。要么消除对消息序列的依赖(最佳选择),要么返回设计并协调可能导致无序处理的所有因素。
答案 1 :(得分:3)
要添加到T.Rob的列表,MDB使用应用程序服务器WorkManager来安排邮件传递,因此邮件顺序还取决于WorkManager启动工作项的顺序。这超出了WMQ的控制范围。如果将MDB ServerSessionPool深度限制为1,则会删除此限制,因为只有一个正在进行的Work实例,但代价是降低最大吞吐量。
如果您在WebSphere应用程序服务器中运行,那么使用ListenerPorts的非ASF模式可以保留消息顺序,但需要遵守一些事务/后退警告。这里有一个支持技术说明: