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 を使用しています