【问题标题】:Mule ESB: Generate Same and Dynamic Correlation ID in Different FlowMule ESB:在不同的流程中生成相同的动态相关 ID
【发布时间】:2014-05-25 00:23:06
【问题描述】:

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

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

如何做到这一点?提前致谢

【问题讨论】:

    标签: mule esb correlation


    【解决方案1】:

    不需要做任何特别的事情来传播流之间的关联 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 是自动传播的。

    【讨论】:

    • 问题是,我不想使用虚拟机。我的第二个流程的入站端点是 wmq。第一个流的endpoint的出站是另一个wmq。第一流和第二流中的 wmq 都是不同的。第一个流中的出站 wmq (WMQ A) 用于写入,第二个流中的入站 wmq (WMQ B) 仅用于读取。
    • 您最初的问题没有提到这一点。我相信我的回答在这种情况下是可以接受的。就 WMQ 而言,它取决于接收消息并对其进行响应以将相关 ID 携带到响应消息中。 Mule 会将相关性放在标准的JMSCorrelationId 消息属性中。
    【解决方案2】:

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

    【讨论】:

    • 问题是,我不想使用虚拟机。我的第二个流程的入站端点是 wmq。第一个流的endpoint的出站是另一个wmq。第一流和第二流中的 wmq 都是不同的。第一个流中的出站 wmq (WMQ A) 用于写入,第二个流中的入站 wmq (WMQ B) 仅用于读取。
    【解决方案3】:

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

    【讨论】:

    • 问题是,我不想使用虚拟机。我的第二个流程的入站端点是 wmq。第一个流的endpoint的出站是另一个wmq。第一流和第二流中的 wmq 都是不同的。第一个流中的出站 wmq (WMQ A) 用于写入,第二个流中的入站 wmq (WMQ B) 仅用于读取。
    • @Anirban Sen Chowdhary 你的回答与我的相比如何增加价值或不同?
    • 对不起..我在发布我的时候没有看到你的答案......请忽略
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-31
    • 2020-03-21
    • 2015-08-03
    • 1970-01-01
    • 2014-04-24
    • 1970-01-01
    相关资源
    最近更新 更多