当使用两个队列在两个应用程序之间进行通信时,如何在activeMq中处理响应超时



假设您有一个使用ActiveMQ队列进行通信的应用程序A和应用程序B。通信如下所示。

  • A使用队列名称向应用程序B发送请求消息com.example.requestQueue
  • B使用来自队列名称com.example.requestQueue的消息请求
  • B需要一些时间来处理消息请求,然后发送使用响应队列返回到Bnamecom.example.responseQueue
  • A使用com.example.responseQueue队列中的响应消息,然后完成

如果应用程序B始终在应答,则没有问题。但是,如果由于某种原因,应用程序B使用来自请求队列com.example.requestQueue的消息,并且从不将响应消息放入响应队列com.example.responseQueue则应用程序a将永远等待。请问有什么办法解决这类问题吗?

注意:应用程序A是用Java和Camel编写的,应用程序B是用C++编写的

谢谢。

Camel支持单个路由中的请求-应答流(交换模式InOut(,或者您可以根据您的用例将请求-应答分成两个单独的路由(均为交换模式InOnly(。

请求-应答模式具有基于所使用的Camel组件的可用超时设置。将超时添加到Application A Camel路由请求回复中。

参考:SJMS组件-较新的JMS组件

参考:JMS组件-原始JMS组件

参考:请求-应答模式-输入-输出模式信息

旁注--如果应用程序A期望向调用方(即web应用程序或REST/SOAP客户端(返回一些东西,则您需要确保将消息传递响应超时设置为低于调用方使用的超时。这允许应用程序A在调用方超时发生之前向调用方返回正确的异常/错误。

最新更新