计算Mule流处理的请求

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

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

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

这个问题的解决方案是将计数器变量创建为单例Spring bean(例如类java.util.concurrent.atomic.AtomicInteger),然后通过Spring再次将其注入自定义Mule组件。 组件可以使用prototype-scope定义,并且每次Message遍历时都可以安全地运行类似counter.incrementAndGet()的东西。 通过这种方式,计数器可以在任何时间保持通过流的消息数量。

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

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

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