Java 统计Mule流处理的请求数

Java 统计Mule流处理的请求数,java,spring,mule,Java,Spring,Mule,我正在使用Mule ESB 3.4。我想开发一个自定义Java组件,用于计算流接收的请求数量。例如,流程如下所示: http inbound-endpoint -> counter -> vm-outbound-endpoint 首先,包含计数器的实际变量应存储在内存中。然后,它可能会被打印到日志或插入到数据库中(目前这并不重要)。我所追求的是一种干净的设计,我可以在以后重新使用它来存储更复杂的应用程序全局状态(基于接收到的消息的数量和内容),并实现更复杂的逻辑。对于干净和解耦的方

我正在使用Mule ESB 3.4。我想开发一个自定义Java组件,用于计算流接收的请求数量。例如,流程如下所示:

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

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

对于干净和解耦的方法,您可以使用服务器通知:


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

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


因为Springbean可以是您喜欢的任何POJO,所以您可以轻松地扩展此设计以允许存储更复杂的状态。当然,存储的对象必须公开线程安全操作。

您是否尝试过实现这一点?你遇到了什么问题?没有,我还没有。我唯一能想到的是组件类中的静态变量。但是,这将使您很难从组件外部访问它,例如,从另一个流:/从您发布的链接“这些通知对性能有一定影响,因此默认情况下它们是禁用的”。此外,我希望能够在消息流动时访问它们:类似于能够保持状态的消息观察者。您可以访问通知中的消息,而通知侦听器实际上就是您所要求的。尽管如此,如果Mule doc说这会对性能产生影响,我肯定这不是我想要的。