目前我正在与Mule ESB合作。现在,我有2个流程,让我们说流程1和流程2.我需要做的是在不同的流程中生成相同的相关ID。相关ID本身的值应该是动态的。我的意思是,第一次运行程序时的相关ID和第二次运行程序时的相关ID应该是不同的。
例如:当我向我的入站发送第一个请求时,相关ID为abcdef(在流程1和流程2中),然后在第一个请求完成后,我发送第二个请求和第二个请求的相关ID是:xyz123455(在流程1和流程2中)。
如何实现?提前致谢
答案 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的其他流中提取会话变量的值