如何在不同流之间传播Mule Correlation ID或任何其他自定义属性

如何在不同流之间传播Mule Correlation ID或任何其他自定义属性,mule,Mule,有没有一种方法可以在经过不同JMS队列的消息中传播MULE\u CORRELATION\u ID。我在元素中尝试了出站,会话作用域,但不起作用。其他自定义属性也是如此 作为一种解决方法,我不得不在中间流中添加消息属性 看起来出站属性最终位于接收端点的入站作用域中。我们可以配置此行为吗 样本骡流量: <flow name="proxyService"> <http:inbound-endpoint address="${xxx.service.address}"

有没有一种方法可以在经过不同JMS队列的消息中传播
MULE\u CORRELATION\u ID
。我在
元素中尝试了
出站
会话
作用域,但不起作用。其他自定义属性也是如此

作为一种解决方法,我不得不在中间流中添加消息属性

看起来出站属性最终位于接收端点的入站作用域中。我们可以配置此行为吗

样本骡流量:

<flow name="proxyService">
    <http:inbound-endpoint address="${xxx.service.address}"
        exchange-pattern="request-response">
        <cxf:proxy-service wsdlLocation="classpath:xxx.wsdl"
            namespace="http://xxxx.com/services/abc" service="ABCService" />
    </http:inbound-endpoint>

    <component class="com.xxxx.services.xxx.ABCServiceProxy" />
    <choice>
        <when evaluator="xpath" expression="fn:local-name(/*/*[1])='blah'">             
            <choice>                    
                <when evaluator="xpath"
                    expression="//acord:TXLifeRequest/acord:TransType/@tc='121'">                       
                    <!-- this is asynchronous communication using correlation id -->
                    <message-properties-transformer scope="outbound">
                        <add-message-property key="MULE_CORRELATION_ID"
                    value="#[xpath://abc:XYZRequest/some ID]" />
                    </message-properties-transformer> 
                     <request-reply > 
                        <jms:outbound-endpoint queue="order.queue">
                            <message-properties-transformer scope="outbound">                                   <delete-message-property key="MULE_REPLYTO" />                                  
                            </message-properties-transformer>
                        </jms:outbound-endpoint>
                         <jms:inbound-endpoint queue="status.queue" />
                    </request-reply>                        
                </when>
                <when evaluator="xpath"
                    <!-- other cases -->
                </when>
                <otherwise>
                    <!-- create failure response -->                        
                    <jms:outbound-endpoint queue="mviq.error.queue" />
                </otherwise>
            </choice>
        </when>
        <otherwise>
            <!-- log -->
        </otherwise>
    </choice>
</flow>

<flow name="ProcessOrder">
    <jms:inbound-endpoint queue="order.queue"
        exchange-pattern="one-way" />
    <!-- Storing the payload in another variable because xslt transformer will overwrite it -->
    <set-variable variableName="xxxPayload" value="#[message.payload]" />
    <xm:xslt-transformer xsl-file="xsl/something.xslt" />
    <choice>
        <when expression="'some string'">
            <!-- Overwriting the current payload to original payload -->                <set-payload value="#[xxxPayload]" />
            <logger level="INFO"
                message="payload before pushing to EMSI queue: #[payload]" />
            <jms:outbound-endpoint queue="order.special.queue" />
        </when>
        <when expression="string 2">
            <!-- other case -->
        </when>
        <when expression="'blah">

        </when>
        <otherwise>

            <jms:outbound-endpoint queue="error.queue" />
        </otherwise>
    </choice>
</flow>


<flow name="ProcessingSpecialQueue">
    <jms:inbound-endpoint queue="order.special.queue" />

    <message-properties-transformer doc:name="Message Properties">

        <add-message-property key="MULE_CORRELATION_ID" value="#some value" />
    </message-properties-transformer>

    .... more logic


</flow>

是否有一种方法可以在经过不同JMS队列的消息中传播MULE_CORRELATION_ID

这应该为您自动完成:如果它没有发生,您很可能遇到了一个bug。骡子版?允许再现问题的示例配置

看起来出站属性最终位于接收端点的入站作用域中

这是一个功能而不是一个bug:没有办法关闭它

编辑我已经能够通过精简版本的配置重现问题:

<jms:activemq-connector name="jmsConnector"
    specification="1.1" />

<flow name="proxyService">
    <http:inbound-endpoint address="http://localhost:8080/test" />
    <set-property propertyName="MULE_CORRELATION_ID" value="custom_cid" />
    <jms:outbound-endpoint queue="order.queue" />
</flow>

<flow name="ProcessOrder">
    <jms:inbound-endpoint queue="order.queue" />
    <logger message="--> ProcessOrder CID: #[message.correlationId]"
        level="INFO" />
    <jms:outbound-endpoint queue="order.special.queue" />
</flow>


<flow name="ProcessingSpecialQueue">
    <jms:inbound-endpoint queue="order.special.queue" />
    <logger message="--> ProcessingSpecialQueue CID: #[message.correlationId]"
        level="INFO" />
</flow>

IMO Mule在这里做的事情不对,因此我将此问题报告为一个bug:

是否有一种方法可以在经过不同JMS队列的消息中传播MULE_CORRELATION_ID

这应该为您自动完成:如果它没有发生,您很可能遇到了一个bug。骡子版?允许再现问题的示例配置

看起来出站属性最终位于接收端点的入站作用域中

这是一个功能而不是一个bug:没有办法关闭它

编辑我已经能够通过精简版本的配置重现问题:

<jms:activemq-connector name="jmsConnector"
    specification="1.1" />

<flow name="proxyService">
    <http:inbound-endpoint address="http://localhost:8080/test" />
    <set-property propertyName="MULE_CORRELATION_ID" value="custom_cid" />
    <jms:outbound-endpoint queue="order.queue" />
</flow>

<flow name="ProcessOrder">
    <jms:inbound-endpoint queue="order.queue" />
    <logger message="--> ProcessOrder CID: #[message.correlationId]"
        level="INFO" />
    <jms:outbound-endpoint queue="order.special.queue" />
</flow>


<flow name="ProcessingSpecialQueue">
    <jms:inbound-endpoint queue="order.special.queue" />
    <logger message="--> ProcessingSpecialQueue CID: #[message.correlationId]"
        level="INFO" />
</flow>


IMO Mule在这里做的事情不对,因此我将此问题报告为错误:

感谢David将其报告为错误。我的荣幸是:请关注错误并对其进行升级投票!谢谢。谢谢David将其报告为bug。我的荣幸是:请关注bug并对其进行更新投票!谢谢