【问题标题】:Mule & WMQ : How do I get the response queue message which corresponds to a request message?Mule & WMQ:如何获取与请求消息对应的响应队列消息?
【发布时间】:2014-06-29 12:21:47
【问题描述】:

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

假设我们将一条消息放在代表特定数据请求的请求队列中。此消息在离开 Mule 时会获得一个消息 ID。现在,我们想选择最终将在响应队列中可用的相应响应消息。但是,我们只能让 Mule 从这个队列中挑选所有消息(以先进先出的方式)。

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

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

【问题讨论】:

    标签: jms mule ibm-mq


    【解决方案1】:

    这在 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 知道只从队列中挑选与指定的相关 ID 匹配的那些消息。

    希望这会有所帮助。

    【讨论】:

      【解决方案2】:

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-03-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-12
        • 2013-12-16
        相关资源
        最近更新 更多