Mule 混合交换模式

Mule 混合交换模式,mule,Mule,当我混合使用交换模式时,我试图理解其中的一种情况 如果我使用单向出站端点调用vm请求-响应入站端点,则不会出现错误,但似乎流从未运行过,例如: <flow name="main" doc:name="main" processingStrategy="asynchronous"> <poll frequency="60000"> <set-payload value="main"></set-payload

当我混合使用交换模式时,我试图理解其中的一种情况

如果我使用单向出站端点调用vm请求-响应入站端点,则不会出现错误,但似乎流从未运行过,例如:

    <flow name="main" doc:name="main" processingStrategy="asynchronous">
        <poll frequency="60000">
            <set-payload value="main"></set-payload>
        </poll>
        <set-variable value="xxx" variableName="var1"></set-variable>
        <logger level="ERROR" message="MAIN1 #[flowVars.var1]" />

        <vm:outbound-endpoint address="vm://vm" />
        <logger level="ERROR" message="MAIN2 #[flowVars.var1]" />
    </flow>


    <flow name="p1">
        <vm:inbound-endpoint address="vm://vm" exchange-pattern="request-response" />
        <logger level="ERROR" message="PRIVATE #[flowVars.var1]" />
    </flow>
</mule>

此配置记录以下内容,但从不打印“PRIVATE xxx”

错误2014-03-26 13:22:35794[[test].main.stage1.01]org.mule.api.processor.LoggerMessageProcessor:MAIN1 xxx 错误2014-03-26 13:22:35812[[test].main.stage1.01]org.mule.api.processor.LoggerMessageProcessor:MAIN2 xxx INFO 2014-03-26 13:22:35816[[test].connector.VM.mule.default.dispatcher.01]org.mule.lifecycle.AbstractLifecycleManager:初始化:“connector.VM.mule.default.dispatcher.784920740”。对象是:VMMessageDispatcher INFO 2014-03-26 13:22:35817[[test].connector.VM.mule.default.dispatcher.01]org.mule.lifecycle.AbstractLifecycleManager:开始:“connector.VM.mule.default.dispatcher.784920740”。对象是:VMMessageDispatcher


如果我在MAIN2周围用另一种方式混合,xxx永远不会打印。有人能解释一下这里到底发生了什么吗?

Mule文档说明如下:

请求-响应:

使用请求-响应端点时,消息是 直接从出站vm端点传递到入站vm 正在同一路径上侦听的终结点。这次送货受阻 和发生在同一线程中。如果没有入站请求响应 同一Mule应用程序中侦听此路径的vm端点,然后 从出站端点调度消息将失败

单向:

使用单向端点时,消息将传递到 通过队列对应的入站端点。这批货很便宜 非阻塞。如果同一Mule中没有入站单向端点 应用程序在此路径上侦听,尽管 消息将成功,消息将保留在队列中。通过 默认情况下,此队列位于内存中,但也可以进行配置 将文件系统用作其持久性的持久队列 机制


我想,请求-响应出站的情况只是在等待响应,因为消息的发送和接收与文档相反。

我无意粗鲁,但这样混合echange模式是没有意义的。我相信一个人永远不应该做这样的事。事实上,最好在vm端点上全局配置您的exchange模式,这样您就有了一致的端点,并且不会出错

<vm:endpoint name="vm-endp" path="vm-endp" exchange-pattern="request-response" />

<flow name="main" doc:name="main" processingStrategy="asynchronous">
    <http:inbound-endpoint exchange-pattern="one-way" name="http-endpoint" host="localhost" port="2003" path="mule" doc:name="HTTP"/>
    <set-variable variableName="var1"  value="xxx"  doc:name="XXX" />
    <logger level="INFO" message="MAIN1 #[flowVars.var1]" />
    <set-payload value="#[flowVars.var1]" />
    <vm:outbound-endpoint ref="vm-endp" />
    <logger level="INFO" message="MAIN2 #[flowVars.var1]" />
    <logger level="INFO" message="PAYLOAD #[message.payloadAs(java.lang.String)]" />
</flow>

<!-- flowVars are FLOW VARIABLES, hence they're not accessible from multiple flows -->

<flow name="flow">
    <vm:inbound-endpoint ref="vm-endp" />
    <logger level="INFO" message="PRIVATE #[flowVars.var1]" />
    <append-string-transformer message=" added to the payload" />
</flow>
INFO [[VMtest].main.stage1.01] org.mule.api.processor.LoggerMessageProcessor: MAIN1 xxx
INFO [[VMtest].main.stage1.01] org.mule.lifecycle.AbstractLifecycleManager: Initialising: 'connector.VM.mule.default.dispatcher.1221995064'. Object is: VMMessageDispatcher
INFO [[VMtest].main.stage1.01] org.mule.lifecycle.AbstractLifecycleManager: Starting: 'connector.VM.mule.default.dispatcher.1221995064'. Object is: VMMessageDispatcher
INFO [[VMtest].main.stage1.01] org.mule.api.processor.LoggerMessageProcessor: PRIVATE null
INFO [[VMtest].main.stage1.01] org.mule.api.processor.LoggerMessageProcessor: MAIN2 xxx
INFO [[VMtest].main.stage1.01] org.mule.api.processor.LoggerMessageProcessor: PAYLOAD xxx added to the payload