0

MULE_CORRELATION_ID異なる JMS キューを通過するメッセージを伝搬する方法はありますか。OUTBOUND、要素のSESSIONスコープを試しまし<message-properties-transformer>たが、機能しません。他のカスタム プロパティについても同様です。

回避策として、中間フローにメッセージ プロパティを追加する必要があります。

送信プロパティは、受信エンドポイントの受信スコープで終了するようです。この動作を設定できますか

サンプル Mule フロー:

<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>

MULE_CORRELATION_IDメッセージを にプッシュする前に設定されましたorder.queue。ここで、もう一度設定する必要がありorder.special.queueます。ここで、メッセージを 3 番目の jms キューにプッシュする必要がある場合は、再度設定する必要があります。

相関 ID を一度だけ設定し、後続のキューで失われないことを期待する方法はありますか。

Mule 3.3.0 を使用しています

4

1 に答える 1

3

異なる JMS キューを通過するメッセージで MULE_CORRELATION_ID を伝搬する方法はありますか。

これは自動的に行われるはずです。そうでない場合は、バグに遭遇している可能性があります。ミュール版?問題を再現できるサンプル構成?

送信プロパティは、受信エンドポイントの受信スコープで終了するようです。

これはバグではなく機能です。これをオフにする方法はありません。

EDIT設定を縮小したバージョンで問題を再現できました。

<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 はここで正しいことをしていないので、この問題をバグとして報告しました: http://www.mulesoft.org/jira/browse/MULE-6577

于 2013-01-03T17:07:59.220 に答える