单个JMS队列上有多个使用者

时间:2019-04-05 02:59:36

标签: asynchronous jms synchronous

JMS Queue有2个使用者,等待响应的同步和异步Java应用程序进程。 1)同步应用程序发送请求,并将根据JMS相关ID等待响应60秒。 2)异步线程将不断在同一队列上侦听。

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

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

1 个答案:

答案 0 :(得分:0)

通常不能保证负载将平均分配,尤其是在同步与异步之间。消费者。同步使用者将不得不轮询,等待,轮询,等待异步。消费者可能正在一个单独的线程中等待套接字,直到消息到达,然后再调用回调。因此异步。消费者最常会先出现。

有机会您可以更改为主题并丢弃您不会发送的消息吗?或更改您的同步。消费者不同步?另一种选择是在同步使用者之前建立一个小的“ asnyc”网关:一个小的应用程序进行异步消耗,然后将收到的每条消息复制到同步的第二个队列中。消费者选择了它。取决于您的JMS提供程序,它可能已经支持这种类型的“ JMS桥”-您正在使用什么?