【问题标题】:Multiple consumer on single JMS queue单个 JMS 队列上的多个使用者
【发布时间】:2019-04-05 02:59:35
【问题描述】:

JMS 队列有 2 个消费者,同步和异步 Java 应用程序进程等待响应。 1)同步应用程序发送请求,将根据 JMS 相关 ID 等待响应 60 秒。 2)异步线程会不断地监听同一个队列。

在这种情况下,当在 60 秒内收到队列中的响应时,我预计负载会同时分布在同步和异步应用程序上。然而,由于某种未知的原因,几乎所有的响应消息都被同步进程所消耗。而且,只有在某些情况下,消息才会被异步处理。

是否有任何因素可能导致仅同步应用程序选择几乎所有消息?

【问题讨论】:

    标签: asynchronous jms synchronous


    【解决方案1】:

    通常无法保证负载会均匀分布,尤其是在同步与异步的情况下。消费者。同步消费者将不得不轮询,等待,轮询,等待异步。消费者可能在单独的线程中等待套接字,直到消息到达,然后调用您的回调。所以异步。消费者总是最先出现。

    您是否有机会更改主题并丢弃您不喜欢的消息?或者改变你的同步。消费者是异步的?另一种选择是在你的同步消费者前面构建一个小的“asnyc”网关:一个小应用程序,它进行异步消费,然后将收到的每条消息复制到同步的第二个队列。消费者拿起它。根据您的 JMS 提供者,它可能已经支持这种类型的“JMS 桥”——您在使用什么?

    【讨论】:

    • 谢谢阿克塞尔。在我的情况下,行为是不同的,同步消费者比异步消费者接收到更多的请求。我使用 MQ 作为我们的 JMS 提供者。是的,将同步消费者更改为异步将解决问题。但是,我很想了解导致负载不均匀分布不规则的因素。
    猜你喜欢
    • 2013-05-07
    • 2013-04-22
    • 2011-10-23
    • 2012-07-14
    • 2012-12-16
    • 2012-01-03
    • 1970-01-01
    • 1970-01-01
    • 2019-04-30
    相关资源
    最近更新 更多