首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >骡子3:控制是否允许执行流

骡子3:控制是否允许执行流
EN

Stack Overflow用户
提问于 2012-08-09 14:01:12
回答 1查看 4.9K关注 0票数 5

我的现状:

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

流#1:

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

流#2:

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

Flow #3

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

问题/问题:

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

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

理想情况下,我需要以下几点:

Requirements:

  1. 必须能够完全通过mule流XML完成,而不需要额外的POJO/自定义Java对象。
  2. 流#4必须在ESB应用程序启动时执行,并且只需要处理第一个入站消息。
  3. 理想情况下,我不希望流#3有一个复合入站源,也不需要评估每个入站消息某个全局变量的状态。

完成我想做的事情的最好方法是什么?

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

谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-09 16:23:22

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

代码语言:javascript
运行
复制
<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。

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11885181

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档