可以使用 JMS/WMQ 进行同步消息传递吗?

use*_*068 5 java messaging jms mq ibm-mq

假设有一个移动应用程序需要从服务器发出同步请求/查询某些数据。请求将首先到达托管 JMS 客户端,该客户端将在外部队列(来自合作伙伴)上发布消息/请求。现在这里开始不清楚了。如何以同步方式从合作伙伴那里得到响应。

  • 合作伙伴是否应该公开单独的队列供我订阅,然后我阻止移动请求,直到我从该单独的队列收到响应消息?
  • JMS 或专有的 WebSphere MQ 接口是否支持同步消息传递?
  • 还有哪些其他方法可以通过消息传递来实现它?

谢谢

T.R*_*Rob 5

教材模式如下:

  1. JMS 应用程序接收来自移动设备的请求。
  2. JMS 应用程序打开回复队列(可能是动态的)。
  3. JMS 应用程序准备一条请求消息,指定 #2 中的目标作为 JMSREplyTo 目标。
  4. JMS 应用程序将同步点之外的请求发送到外部服务提供者。
  5. JMS 应用程序以指定的等待间隔侦听响应。如果它使用动态回复队列,它会执行简单的接收。如果多个实例正在侦听同一个队列(这更可能是外部服务),则它将使用从发送返回的 JMSMessageID 作为在接收上指定的 JMSCorrelationID。
  6. JMS 应用程序接收来自外部服务的响应。
  7. JMS 应用程序回复移动设备。

请注意,对于 WMQ,服务提供者的预期行为是将 JMSMessageID 从请求消息复制到响应的 JMSCorrelationID。要求发送方生成 JMSCorrelation ID 并将其复制到响应的 JMSCorrelationID 的情况不太常见,但某些应用程序使用该行为。您需要了解您的服务提供商如何处理此问题,以确定请求者应用程序的正确行为。

如果您使用完整的 WMQ 客户端安装,您将已经拥有完成大部分工作的示例代码。如果安装到默认位置,请查看...

C:\Program Files\IBM\Websphere MQ\tools\jms\samples\simple\simpleRequestor.java

...或 UNIX/Linux 发行版下的等效位置/var/mqm。这是安装完整客户端而不是简单获取 jar 文件的众多原因之一。如果您需要下载,客户端将以SupportPac MQC7形式提供。