假设有一个移动应用程序需要对来自服务器的某些数据进行同步请求/查询。请求将首先发送到托管的JMS客户端,它将在外部队列(来自合作伙伴)上发布消息/请求。现在在这里开始不清楚。我如何以同步方式获得合作伙伴的回复。使用JMS/WMQ可以实现同步消息传递?
- 如果合作伙伴揭露单独的队列为我订阅,然后我阻止移动请求,直到我从单独的队列得到的回应消息?
- JMS或专有WebSphere MQ接口是否支持同步消息传递?
- 什么是通过消息传递实现它的其他方法?
感谢
假设有一个移动应用程序需要对来自服务器的某些数据进行同步请求/查询。请求将首先发送到托管的JMS客户端,它将在外部队列(来自合作伙伴)上发布消息/请求。现在在这里开始不清楚。我如何以同步方式获得合作伙伴的回复。使用JMS/WMQ可以实现同步消息传递?
感谢
教科书模式如下:
请注意,对于WMQ,服务提供者的预期行为是将JMSMessageID从请求消息复制到响应的JMSCorrelationID。要求发送者生成JMSCorrelation ID并将其复制到响应的JMSCorrelationID中是不常见的,但是一些应用程序使用该行为。您需要了解您的服务提供商如何处理此问题,以确定请求者应用程序的正确行为。
如果您使用的是完整的WMQ客户端安装,您将已经拥有大部分代码。如果安装到默认位置,看在...
C:\Program Files\IBM\Websphere MQ\tools\jms\samples\simple\simpleRequestor.java
...或/var/mqm
下的等价位置UNIX/Linux发行版。这是安装完整客户端而不是简单地抓取jar文件的诸多原因之一。如果您需要下载的客户端是交付为SupportPac MQC7。
在我的头顶,我看到2种方式。
创建2个队列:传入和传出。客户端发送到传入队列并从传出队列接收消息。
您可以对两者使用相同的队列。只需为每条消息设置特殊属性并使用选择器来仅过滤相关消息。
您的服务器端应先发送消息,然后调用receive
方法(请参阅JMS的javadoc)。此方法被阻止,直到您收到消息或超时过期。使用这种方式并且不听信息很重要(监听器用于异步模式)
“客户端”可以创建临时队列并在请求中传递此名称。
“服务器”在已知队列上接收请求,但发送具有“客户机”指定的队列名称的“replyTo”。
JMS具有用于此目的的“replyTo”属性。
这样客户端只能看到针对它的消息。
感谢T.Rob, \ n 我们没有WMQ服务器。答复队列(从1开始)也可以是远程队列吗?这样我们就可以成为一个纯粹的客户端,并且不必托管服务器?或者你必须有本地回复队列? 此外,这种情况下工作在并发环境?就像数百个移动设备将通过相同的消费者发送消息并通过同一个听众接收响应一样。 – user567068 2011-02-18 03:11:50