【问题标题】:Multiple MQ listeners多个 MQ 侦听器
【发布时间】:2019-08-14 22:34:24
【问题描述】:

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

谢谢

【问题讨论】:

  • 设置两个消息监听器,每个队列一个。这样就可以了。

标签: listener mq


【解决方案1】:

如果您必须使用一个线程来处理所有消息,您应该使用这样的同步 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 ...
}

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

【讨论】:

    【解决方案2】:

    这取决于您使用的语言。

    如果你使用 C,你可以尝试使用回调。

    https://www.ibm.com/support/knowledgecenter/SSFKSJ_9.0.0/com.ibm.mq.dev.doc/q023050_.htm

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-19
      • 1970-01-01
      • 2010-12-04
      • 2012-07-11
      • 2011-01-20
      • 1970-01-01
      • 2021-06-03
      • 2010-12-04
      相关资源
      最近更新 更多