我的现状:
我目前有一个Mule ESB应用程序,它有三个流,它们处理来自两个不同源的消息,这三个流使用VM队列绑定在一起。
流#1:
入站(端点#1) -> (执行消息处理和转换) ->出站(端点#3)
流#2:
入站(端点#2) -> (执行消息处理和转换) ->出站(端点#3)
Flow #3
入站(端点#3) -> (执行消息处理和转换,执行操作) ->出站
问题/问题:
现在,我要做的是引入第四个流,流程#4,它从入站端点获取状态信息,并且基于这些信息能够防止流#3被执行/阻止它处理入站消息。
换句话说,理想情况下,我希望在ESB应用程序的启动时运行Flow #4 (就像所有流看起来都是自动运行的那样),并根据从它的入站消息中获得的状态信息,防止/允许或启用/禁用Flow #3从端点#3处理消息。
理想情况下,我需要以下几点:
Requirements:
完成我想做的事情的最好方法是什么?
如果没有真正好的解决方案,那么如果我必须省略#3需求,那么实现这样一个全局变量的最佳方法是在两个独立的流之间共享,而这两个独立的流没有被某个出站->入站端点绑定在一起?我尝试过使用会话属性,但它们要求将流作为子流或端点绑定在一起。
谢谢。
发布于 2012-08-09 16:23:22
使用一个全局属性和一些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>
向vm://gate.in
发送任何消息都会关闭门,gated-flow
将停止处理它接收到的消息。
您可以使用任何您想要的协议,而不是VM。
https://stackoverflow.com/questions/11885181
复制相似问题