【问题标题】:Mule - mixing exchange patterns骡 - 混合交换模式
【发布时间】:2014-04-17 23:38:55
【问题描述】:

当我混合交换模式时,我试图了解发生了什么。

如果我用单向出站端点调用 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:35,794 [[test].main.stage1.01] org.mule.api.processor.LoggerMessageProcessor: MAIN1 xxx 错误 2014-03-26 13:22:35,812 [[test].main.stage1.01] org.mule.api.processor.LoggerMessageProcessor: MAIN2 xxx 信息 2014-03-26 13:22:35,816 [[test].connector.VM.mule.default.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager:初始化:'connector.VM.mule.default.dispatcher.784920740 '。对象是:VMMessageDispatcher 信息 2014-03-26 13:22:35,817 [[test].connector.VM.mule.default.dispatcher.01] org.mule.lifecycle.AbstractLifecycleManager:开始:'connector.VM.mule.default.dispatcher.784920740 '。对象为:VMMessageDispatcher

如果我以其他方式混合它们 MAIN2 xxx 永远不会打印。有人能解释一下这里到底发生了什么吗?

【问题讨论】:

    标签: mule


    【解决方案1】:

    Mule 文档声明如下:

    请求-响应:

    当使用请求-响应端点时,消息是 直接从出站 vm 端点传送到入站 vm 在同一路径上侦听的端点。此交付被阻止 并且发生在同一个线程中。如果没有入站请求-响应 vm 端点在同一个 Mule 应用程序中侦听此路径,然后 从出站端点发送消息将失败。

    单向:

    当使用单向端点时,消息被传递到 通过队列对应的入站端点。本次发货是 非阻塞。如果同一个 Mule 中没有入站单向端点 应用程序侦听此路径,然后,虽然调度 消息将成功,消息将保留在队列中。经过 默认情况下,此队列在内存中,但也可以配置 将使用文件系统作为其持久性的持久性队列 机制。

    http://www.mulesoft.org/documentation/display/current/VM+Transport+Reference

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

    【讨论】:

      【解决方案2】:

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

      <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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-01
        • 2012-08-04
        • 2011-04-13
        • 2020-06-11
        相关资源
        最近更新 更多