我如何在 mulesoft 中实现 IF

How do I implement IF in mulesoft

我想在 Mulesoft 流程中做出决定,并查看了 Choice Flow Control。我的问题是,如果条件为真,我想做一些事情,如果条件为假,我什么都不做,比如:

if (condition == true)
   do some work

或者,可能不正确 xml:

<choice doc:name="call a subflow if the test is true">
    <when expression="#[flowVars.someVariable == True]">
        <flow-ref name="doSomething" doc:name="do another thing"/>
    </when>
</choice>

没有 else 子句,也没有默认流程。这是如何在 Mulesoft 流程中实现的? 我可以作弊,并将日志记录调用放入默认流程,但我不想这样做。

不幸的是,Mule 中没有简单的 'if' 处理器。暂时选择带有虚拟路由或过滤器的方法。

这里对此有很好的讨论:https://www.mulesoft.org/jira/browse/MULE-6129。这进一步链接到可能的增强功能,例如 if/detour 路由器。

骡子 4 更新

在 mule 4 中,您现在可以定义一个选择路由器而不需要 otherwise 路由。过滤器不再存在

您可以使用异步或更丰富的范围和过滤器来接近。它不如真正的 <if> 处理器 (or a standalone <when>) 优雅,但您不需要浪费 <logger> 来满足 <otherwise>.

异步方法(当您之后不需要负载时):

<async>
    <expression-filter expression="#[payload == 'red']" />
    <logger category="com.box.integration.experiment" message="That's my favorite color!" level="INFO" />
</async>

丰富方法(当你这样做时):

<enricher target="#[variable:colorName]">
    <processor-chain>
        <expression-filter expression="#[payload == 'red']" />
        <set-payload value="vermillion" />
    </processor-chain>
</enricher>

在mule flow中,当在section中没有设置Processor的情况下使用消息路由器,并且MuleMessage不匹配任何子句时,抛出异常。为了实现条件行为,当前 mule 需要在 otherwise 子句上设置一个虚拟处理器。一项可用性改进是,如果没有匹配的子句并且没有提供处理器,则让消息由流程的其余部分处理 https://www.mulesoft.org/jira/browse/MULE-6129