Esb Mule 3:控制是否允许执行流
我目前的处境: 我目前有一个Mule ESB应用程序,其中有三个流处理来自两个不同来源的消息,这三个流使用VM队列绑定在一起 流量#1: 入站(端点1)->(执行消息处理和转换)->出站(端点3) 流量#2: 入站(端点2)->(执行消息处理和转换)->出站(端点3) 流量#3 入站(端点#3)->(执行消息处理和转换,执行任务)->出站 问题/问题: 现在我要做的是引入第四个流,流#4,它从入站端点获取状态信息,并基于此信息能够阻止流#3执行/阻止它处理入站消息 换句话说,理想情况下,我希望让Flow#4在ESB应用程序启动时运行(就像所有流似乎都自动运行一样),并基于它从入站消息中获得的状态信息,阻止/允许或启用/禁用Flow#3处理来自端点#3的消息 以下是我理想的要求: 要求:Esb Mule 3:控制是否允许执行流,esb,mule,Esb,Mule,我目前的处境: 我目前有一个Mule ESB应用程序,其中有三个流处理来自两个不同来源的消息,这三个流使用VM队列绑定在一起 流量#1: 入站(端点1)->(执行消息处理和转换)->出站(端点3) 流量#2: 入站(端点2)->(执行消息处理和转换)->出站(端点3) 流量#3 入站(端点#3)->(执行消息处理和转换,执行任务)->出站 问题/问题: 现在我要做的是引入第四个流,流#4,它从入站端点获取状态信息,并基于此信息能够阻止流#3执行/阻止它处理入站消息 换句话说,理想情况下,我希望让
谢谢。使用全局属性和一些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停止流将停止其消息源。