【问题标题】:Count the requests processed by a Mule flow计算 Mule 流处理的请求数
【发布时间】:2014-03-09 17:10:56
【问题描述】:

我正在使用 Mule ESB 3.4。我想开发一个自定义 Java 组件来计算流接收到的请求数。流程将例如是这样的:

http inbound-endpoint -> counter -> vm-outbound-endpoint

首先,包含计数器的实际变量应该存储在内存中。然后它可能会打印到日志或插入数据库(现在不重要)。我所追求的是一个干净的设计,我以后可以重新使用它来存储更​​复杂的应用程序全局状态(基于接收到的消息的数量和内容)并实现更复杂的逻辑。

【问题讨论】:

  • 您是否尝试过任何方法来实现此功能?您遇到了什么问题(如果有的话)?
  • 不,我还没有。我唯一能想到的就是组件类中的一个静态变量。但是,这会使从组件外部访问它变得很困难,例如来自另一个流程:/

标签: java spring mule


【解决方案1】:

对于干净和解耦的方法,您可以使用服务器通知: http://www.mulesoft.org/documentation/display/current/Mule+Server+Notifications

您只需要为可以是 Spring bean 的端点消息添加侦听器并将值存储在那里。

【讨论】:

  • 来自您发布的链接“这些通知对性能有一些影响,因此默认情况下它们被禁用”。此外,我希望能够在消息流动时访问它们:类似于能够保持状态的消息观察者。
  • 您可以访问通知中的消息,而通知侦听器实际上就是您所要求的。
  • 不过,如果 Mule 文档说它会对性能产生影响,我敢肯定这不是我想要的。
【解决方案2】:

解决这个问题的方法是将 counter 变量创建为单例 Spring bean(例如 java.util.concurrent.atomic.AtomicInteger 类),然后通过 Spring 再次将其注入到自定义 Mule 组件中。该组件可以使用原型范围定义,并且可以在每次消息遍历它时安全地运行诸如 counter.incrementAndGet() 之类的东西。这样,计数器将在任何时候保持通过流的消息数量。

由于 Spring bean 可以是您喜欢的任何 POJO,您可以轻松扩展此设计以允许存储更复杂的状态。存储的对象当然要暴露线程安全的操作。

【讨论】:

    猜你喜欢
    • 2015-03-07
    • 2017-12-11
    • 1970-01-01
    • 2014-07-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-09
    • 1970-01-01
    相关资源
    最近更新 更多