如何确定mule flow消息处理是否正在进行

如何确定mule flow消息处理是否正在进行,mule,Mule,我有一个要求,我需要确保mule流一次只处理一条消息。流由quartz调度程序触发,该调度程序每次从FTP服务器读取一个文件 我建议的解决方案是保留一个全局变量“FLOW_STATUS”,当收到消息时,该变量将设置为“RUNNING”,并在消息处理完成后重置为“STOPPED” 如果“flow_STATUS”为“RUNNING”,则馈送到流的任何消息都将检查此变量并中止 这个设置似乎正在运行,但我想知道是否有更好的方法 是否有任何与此相关的最佳实践或任何内置mule helper函数来实现相同的

我有一个要求,我需要确保mule流一次只处理一条消息。流由quartz调度程序触发,该调度程序每次从FTP服务器读取一个文件

我建议的解决方案是保留一个全局变量“FLOW_STATUS”,当收到消息时,该变量将设置为“RUNNING”,并在消息处理完成后重置为“STOPPED”

如果“flow_STATUS”为“RUNNING”,则馈送到流的任何消息都将检查此变量并中止

这个设置似乎正在运行,但我想知道是否有更好的方法


是否有任何与此相关的最佳实践或任何内置mule helper函数来实现相同的效果,而不是依赖全局变量?似乎更简单的解决方案是将流的maxActiveThreads设置为1。在Mule中,处理的每条消息都有自己的线程。因此,将maxActiveThreads设置为1将有效地使流单线程化。其他挂起的请求将在接收器线程中等待。您需要确保接收方线程池足够大,以容纳所有潜在的等待线程。这可能意味着限制quartz调度程序,以便有时间处理文件,从而使接收方线程池不会填满。有关线程池以及如何优化性能的更多信息,请访问以下链接:

谢谢!。这是否意味着我的流处理应该是同步的,以便只有在所有处理完成后才会释放Receiver线程。我使用VM队列来利用流中的集群。我相信最终会提前释放Receiver线程,在这个模块上,每个流将使用三个线程池。接收方池、处理池和调度池。当新消息进入Mule服务器以获取流时,将为该消息启动一个新的接收方线程。如果接收器池中没有剩余线程,服务器将阻塞并等待一个线程。这时您开始出现性能问题。接收方池中的线程将等待处理池中的线程打开,然后传递消息进行处理。在集群环境中,Mule将在集群中的任何可用服务器上查找线程。我必须锁定流,直到消息处理完成。由于我在这两个队列之间使用VM队列,所以我假设接收方线程将消息从VM队列的处理池移交给线程,并返回接收方池。这将意味着服务器可以使用该线程接收另一条消息,而之前的消息处理仍在进行中。因此,在我的用例中,将maxActiveThreads=1作为接收方线程配置文件是没有帮助的。如果我的假设是错误的,请纠正我。我猜使用全局变量是唯一的出路。