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

How to handle response timeout in activeMq when using two queues for communication between two applications

假设您有一个应用程序 A 和一个应用程序 B,它们使用 ActiveMQ 队列一起通信。通信发生如下。

如果应用程序B一直在接听,就没有问题。 但是,如果由于某种原因,应用程序 B 从请求队列 com.example.requestQueue 中消费了一条消息,并且从不将响应消息放入响应队列 com.example.responseQueue ,应用程序A将永远等待。 请问有什么办法可以解决这种问题吗?

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

谢谢。

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

请求-回复模式根据使用的 Camel 组件提供超时设置。将超时添加到 Application A Camel 路由请求-回复。

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

参考:JMS Component - 原始 JMS 组件

参考:Request Reply pattern - InOut 模式信息

旁注-- 如果应用程序 A 预期会 return 调用者(即网络应用程序或 REST/SOAP 客户端),那么您希望确保设置消息响应超时低于调用者使用的超时。这允许应用程序 A 在调用者超时发生之前 return 向调用者发送适当的 exception/error。