Mule ESB:在不同流中生成相同和动态关联ID

时间:2014-05-23 06:36:29

标签: mule esb correlation

目前我正在与Mule ESB合作。现在,我有2个流程,让我们说流程1和流程2.我需要做的是在不同的流程中生成相同的相关ID。相关ID本身的值应该是动态的。我的意思是,第一次运行程序时的相关ID和第二次运行程序时的相关ID应该是不同的。

例如:当我向我的入站发送第一个请求时,相关ID为abcdef(在流程1和流程2中),然后在第一个请求完成后,我发送第二个请求和第二个请求的相关ID是:xyz123455(在流程1和流程2中)。

如何实现?提前致谢

3 个答案:

答案 0 :(得分:2)

没有必要做任何特别的事情来传播流之间的相关ID:Mule为你做。此外,Mule为每个入站消息生成唯一ID,因此您只需将其用作相关ID。

以下是一个例子:

<flow name="firstFlow">
    <http:inbound-endpoint address="http://localhost:8080/test" />

    <!-- No correlation ID yet -->
    <logger level="INFO" message="CID: #[message.correlationId]" />

    <!-- Use the message unique ID as its correlation ID -->
    <set-property propertyName="MULE_CORRELATION_ID" value="#[message.id]" />

    <!-- Correlation ID is set -->
    <logger level="INFO" message="CID: #[message.correlationId]" />

    <vm:outbound-endpoint path="second.flow" />
</flow>

<flow name="secondFlow">
    <vm:inbound-endpoint path="second.flow" />

    <!-- Correlation ID is propagated -->
    <logger level="INFO" message="CID: #[message.correlationId]" />
</flow>

如果您curl http://localhost:8080/test,您会在日志中看到类似于:

的内容
09:18:58,824 INFO connector.http.mule.default.receiver.02 [org.mule.api.processor.LoggerMessageProcessor] CID: null
09:18:58,831 INFO  connector.http.mule.default.receiver.02 [org.mule.api.processor.LoggerMessageProcessor] CID: 1c51391c-e35f-11e3-926a-9979ff687cfa
09:18:58,847 INFO  connector.http.mule.default.receiver.02 [org.mule.lifecycle.AbstractLifecycleManager] Initialising: 'connector.VM.mule.default.dispatcher.11119625'. Object is: VMMessageDispatcher
09:18:58,848 INFO  connector.http.mule.default.receiver.02 [org.mule.lifecycle.AbstractLifecycleManager] Starting: 'connector.VM.mule.default.dispatcher.11119625'. Object is: VMMessageDispatcher
09:18:58,860 INFO  secondFlow.stage1.02 [org.mule.api.processor.LoggerMessageProcessor] CID: 1c51391c-e35f-11e3-926a-9979ff687cfa

如您所见,相关ID会自动传播。

答案 1 :(得分:1)

您可以在一个流中生成动态相关ID(比如说UUID类),将其存储为session variable并在另一个流中使用它。

答案 2 :(得分:0)

简单解决方案: - 只存储在会话变量中动态生成的相关ID,并在需要相同ID的其他流中提取会话变量的值