我正在开展一个项目,目的是测试Mule及其针对IBM Websphere MQ的功能。我们能够获取WMQ连接器将消息放在任何给定队列上并在任何给定队列上选择消息。但是,我们无法将响应消息(在响应队列上)与请求消息(放在请求队列上)相关联。
假设我们在请求队列上放置一条消息,代表一个特定的数据请求。离开骡子时,此消息会收到消息ID。现在,我们想要选择相应的响应消息,该消息最终将在响应队列中可用。但是,我们只能让Mule从这个队列中选择所有消息(以FIFO方式)。
IBM Websphere MQ API有一个类MQQueue
,它公开方法get()。此方法接受MQMessage
参数。如果在MQMessage
实例上设置了messageId属性,那么API将确保仅返回具有此id的消息。换句话说,它不会将响应队列视为FIFO队列,而是在队列中查询具有给定messageId的消息。
如何让Mule以这种方式工作?
答案 0 :(得分:0)
但是我们没有成功,但这可能是我们实现的结果,所以我们基于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匹配的消息。
希望这有帮助。