首页 > 解决方案 > 多个 MQ 侦听器

问题描述

我有一个场景,我们的应用程序中有两个 MQ 侦听器。其中一个正在做一些额外的处理(数据库表更新),日队列 A 而另一个不是,比如说队列 B。问题是我们只有一个线程(这两个线程的主线程)并且消息被发送到A第一。因此,当代码到达它将处理/更新在 A 上接收到的消息的点时,B 上的消息到达,因此更新永远不会通过。即使 B 收到消息,如何确保 A 上的消息也能进行处理?

谢谢

标签: listenermq

解决方案


如果您必须使用一个线程来处理所有消息,您应该使用同步 api 调用,如下所示:

long timeoutForA, timeoutForB ...
MessageConsumer consumerA, consumerB ....

while (true) {
  Message msgFromA = consumerA.receive(timeout);
  if (msgFromA == null) 
    break;
  ... do something with message from A ...
}

while (true) {
  Message msgFromB = consumerB.receive(timeout);
  if (msgFromB == null) 
    break;
  ... do something with message from B ...
}

但是,我一般不会推荐这种业务逻辑方法。设计合理的消息系统应该能够异步处理不相关的消息。


推荐阅读