假设有一个移动应用程序需要对来自服务器的某些数据进行同步请求/查询。该请求将首先托管JMS客户端,该请求将在外部队列(来自合作伙伴)上发布消息/请求。现在这里开始不清楚了。如何以同步方式从伙伴处获得回复。
谢谢
答案 0 :(得分:4)
教科书模式如下:
请注意,对于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发送。
答案 1 :(得分:2)
“客户端”可以创建一个临时队列,并在请求中传递此名称。
“服务器”在已知队列上接收请求,但发送“replyTo”,其中包含由“client”指定的队列名称。
JMS为此目的有一个“replyTo”属性。
这样客户端只会看到针对它的消息。
答案 2 :(得分:0)
在我的头顶,我看到两种方式。
创建2个队列:传入和传出。客户端发送到传入队列并从传出队列接收消息。
您可以为两者使用相同的队列。只需为每条消息设置特殊属性,并使用选择器仅过滤相关消息。
您的服务器端应首先发送消息,然后调用receive
方法(请参阅JMS javadoc)。此方法将被阻止,直到您收到消息或超时为止。使用这种方式并且不监听消息(侦听器用于异步。模式)非常重要。