【问题标题】:How to break the loop from mule 'Splitter' component?如何打破骡子'Splitter'组件的循环?
【发布时间】:2016-06-03 19:16:34
【问题描述】:

我知道Splitter是mule中的异步循环。

我想用一些条件打破它。有什么办法吗?

可以使用For Each 组件来完成吗?我应该拖动什么组件来打破循环?

我正在使用xpath 来拆分 xml 以进行循环。

【问题讨论】:

    标签: mule


    【解决方案1】:

    拆分器为您指定的集合中的每个项目创建单独的消息。如果您想阻止其中一些项目被处理,请在拆分器后使用Filter

    或者,您可以创建一个更复杂的 xpath 以仅返回您想要处理的项目。例如,/order/item[position() < 4] 将仅返回文档中的前三个项目节点。

    如果你真的想“打破”并确保集合中没有其他项目被处理,你可以在ForEach 的正文中生成一个异常。您的流程的异常策略将立即被调用,并且不会再处理任何项目。

    【讨论】:

      【解决方案2】:

      我也有同样的问题。当条件为真时我想打破的 for-each 循环(流程相当复杂,但简而言之......)

      我认为生成异常不是一个好主意。我已经达到的最佳方法是在循环开始时使用 for-each 和 filter 表达式。

      例子:

       <flow name="break-foreach" processingStrategy="Queued_Asynchronous_Processing_Strategy">
              <http:listener config-ref="HTTP_Sat" path="/loop " allowedMethods="GET" doc:name="HTTP"/>
              <set-payload value="#[[0,1,2,3,4]]" doc:name="Set Payload"/>
              <foreach collection="payload" doc:name="For Each">
                  <logger message="Iteration before filter: #[payload]" level="INFO" doc:name="Logger"/>
                  <expression-filter expression="#[payload&lt;3]" doc:name="Expression"/>
                  <logger message="Iteration after filter: #[payload]" level="INFO" doc:name="Logger"/>
              </foreach>
          </flow>
      

      控制台显示如下:

      Iteration before filter: 0
       Iteration after filter: 0
       Iteration before filter: 1
       Iteration after filter: 1
       Iteration before filter: 2
       Iteration after filter: 2
       Iteration before filter: 3
       Iteration before filter: 4
      

      当然,这不是中断,因为 for-each 一直在处理。

      【讨论】:

        猜你喜欢
        • 2019-11-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-01-30
        • 2015-10-04
        • 2013-08-31
        相关资源
        最近更新 更多