骡子& WMQ:如何获取与请求消息对应的响应队列消息?

时间:2014-05-12 08:09:44

标签: jms mule ibm-mq

我正在开展一个项目,目的是测试Mule及其针对IBM Websphere MQ的功能。我们能够获取WMQ连接器将消息放在任何给定队列上并在任何给定队列上选择消息。但是,我们无法将响应消息(在响应队列上)与请求消息(放在请求队列上)相关联。

假设我们在请求队列上放置一条消息,代表一个特定的数据请求。离开骡子时,此消息会收到消息ID。现在,我们想要选择相应的响应消息,该消息最终将在响应队列中可用。但是,我们只能让Mule从这个队列中选择所有消息(以FIFO方式)。

IBM Websphere MQ API有一个类MQQueue,它公开方法get()。此方法接受MQMessage参数。如果在MQMessage实例上设置了messageId属性,那么API将确保仅返回具有此id的消息。换句话说,它不会将响应队列视为FIFO队列,而是在队列中查询具有给定messageId的消息。

如何让Mule以这种方式工作?

2 个答案:

答案 0 :(得分:0)

您可以尝试使用http://www.mulesoft.org/documentation/display/current/Routing+Message+Processors#RoutingMessageProcessors-RequestReply

但是我们没有成功,但这可能是我们实现的结果,所以我们基于IBM MQ库创建了一个自定义java组件。

我们必须放在一个队列上,获取放在另一个队列上,其中get使用put消息id和corr。 id为零(0)

答案 1 :(得分:0)

在Mule中与JMS结合使用很容易。

在将消息发布到JMS队列(请求队列)之前,为消息设置唯一的相关ID。

然后,当您轮询响应消息的响应队列时,请使用以下类型的轮询

String responseUrl = "application.response.queue"+ "&selector=JMSCorrelationID%3D'" +  uniqueCorrelationID + "'";               
EndpointBuilder endpointBuilder = new EndpointURIEndpointBuilder(responseUrl, eventContext.getMuleContext());
InboundEndpoint inboundEndpoint = endpointBuilder.buildInboundEndpoint();
MuleMessage responseMuleMsg = eventContext.requestEvent(inboundEndpoint, 60000);

uniqueCorrelationID是设置为请求消息的ID。 这种方式Mule知道只挑选来自队列的那些与指定的correlationID匹配的消息。

希望这有帮助。