假设您有一个使用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在调用方超时发生之前向调用方返回正确的异常/错误。