如何使用MDB从队列中按顺序读取消息?

Vij*_*r G 5 websphere synchronous message-driven-bean ibm-mq

我有一个侦听WebSphere MQ的MDB.它不会按队列接收的顺序获取消息.我如何让它按顺序读取?可能吗?我应该不使用MDB吗?

T.R*_*Rob 5

通常,WMQ按照收到的顺序发送消息.但是,有几件事可能会影响......

  1. 如果队列设置为优先级而不是FIFO传送,并且消息以不同的优先级到达,则它们将"无序"地传送.
  2. 区分订单生产和订单交付.如果消息是在远程QMgr上生成的,并且有多条路径指向本地QMgr,则消息可能无序到达.
  3. 持久性的差异 - 如果消息是在远程QMgr上生成的并且具有不同的持久性,则非持久消息可能比持久消息更快到达,尤其是在设置了通道NPMSPEED(FAST)的情况下.
  4. 多个读取器/写入器 - 对序列的任何依赖性意味着单个生产者通过单个路径发送给单个使用者.生产者,消费者或它们之间的路径中的任何冗余都可能导致不按顺序传递消息.
  5. 同步点 - 为了保留序列,必须在同步点下写入和使用所有消息,否则必须在同步点之外写入和使用所有消息.
  6. 选择器 - 这些选择器专门用于根据队列中所有消息的上下文不按顺序传递消息.
  7. 消息组 - 对分组消息的检索通常会等到整个组出现.如果组是交错的,则不按顺序传递消息.
  8. DLQ - 如果目标队列填满,则可以将消息传递给DLQ.当目标队列耗尽时,消息开始返回.如果队列接近容量,则消息可以在目标队列和DLQ之间交替.

因此,当MDB接收到无序的消息时,这些东西中的任何一个,或者甚至是其中的几个,都可能是原因.要么消除对消息序列的依赖(最佳选择),要么返回设计并协调可能导致无序处理的所有因素.