Esb Mule 3:控制是否允许执行流

Esb Mule 3:控制是否允许执行流,esb,mule,Esb,Mule,我目前的处境: 我目前有一个Mule ESB应用程序,其中有三个流处理来自两个不同来源的消息,这三个流使用VM队列绑定在一起 流量#1: 入站(端点1)->(执行消息处理和转换)->出站(端点3) 流量#2: 入站(端点2)->(执行消息处理和转换)->出站(端点3) 流量#3 入站(端点#3)->(执行消息处理和转换,执行任务)->出站 问题/问题: 现在我要做的是引入第四个流,流#4,它从入站端点获取状态信息,并基于此信息能够阻止流#3执行/阻止它处理入站消息 换句话说,理想情况下,我希望让

我目前的处境:

我目前有一个Mule ESB应用程序,其中有三个流处理来自两个不同来源的消息,这三个流使用VM队列绑定在一起

流量#1:

入站(端点1)->(执行消息处理和转换)->出站(端点3)

流量#2:

入站(端点2)->(执行消息处理和转换)->出站(端点3)

流量#3

入站(端点#3)->(执行消息处理和转换,执行任务)->出站

问题/问题:

现在我要做的是引入第四个流,流#4,它从入站端点获取状态信息,并基于此信息能够阻止流#3执行/阻止它处理入站消息

换句话说,理想情况下,我希望让Flow#4在ESB应用程序启动时运行(就像所有流似乎都自动运行一样),并基于它从入站消息中获得的状态信息,阻止/允许或启用/禁用Flow#3处理来自端点#3的消息

以下是我理想的要求:

要求:

  • 必须能够仅通过mule flow XML完成,不需要额外的POJO/自定义Java对象
  • 流#4必须在ESB应用程序启动时执行,并且只需要处理第一条入站消息
  • 理想情况下,我不希望Flow#3有一个复合入站源,或者必须计算每个入站消息的某个全局变量的状态
  • 完成我想做的事情的最佳方式是什么

    如果没有真正好的解决方案,那么如果我必须省略#3要求,那么实现这样一个全局变量的最佳方法是什么?该全局变量在两个独立的流之间共享,而这两个流没有被XML配置中的某个出站->入站端点绑定在一起?我尝试过使用会话属性,但它们要求流作为子流或由端点绑定在一起


    谢谢。

    使用全局属性和一些MEL表达式来实现这一点:

    <global-property name="gate_open" value="true" />
    
    <flow name="gated-flow">
        <vm:inbound-endpoint path="gated.in" />
        <expression-filter expression="#[app.registry.gate_open]" />
        ...
    </flow>
    
    
    <flow name="gate-controller">
        <vm:inbound-endpoint path="gate.in"  />
        <expression-component>
          app.registry.gate_open = false
        </expression-component>
    </flow>
    
    
    ...
    app.registry.gate_open=false
    
    将任何消息发送到
    vm://gate.in
    将关闭闸门,
    gated flow
    将停止处理它接收到的消息


    您可以使用任何您想要的协议来代替VM。

    我正要提出#3,即在Mule注册表中使用全局变量。为什么这是不可接受的?另外,虽然不需要定制Java类,但需要一些MEL/Groovy脚本。好吧,同样的,需求,特别是#3正是我理想中想要的。但是,如果没有更好的解决方案或方法来实现期望的行为,那么这是我的最后手段。在XML配置中如何实现这样的全局变量?如何在流之外的XML中全局声明变量并在流中引用它?谢谢,太棒了,谢谢!这是一个比我想象的更简单、更干净的解决方案。它看起来只接受一条消息:两个流都从端点获取消息,一个流关闭另一个流。我想知道这是否会造成竞争条件,从而可能发生两件不愉快的事情之一:1)控制器流在第一条消息被处理之前关闭选通流,或者2)在控制器流中的第一条消息有机会更改变量值之前,第二条消息可能会滑过选通流。“两个流都从端点获取消息“:否,它们侦听两个不同的VM队列:
    gated.in
    gate.in
    。对于要关闭但不是VM入站而是轮询或AMQP入站的流,您将如何执行此操作?”。将投票设置为高数值?和上面一样使用表达式过滤器,但是使用java属性?(我想通过配置禁用输入流)@dlite922停止流将停止其消息源。