Apache camel 并发消费者可以在Camel中共享数据的任何简单方式?

Apache camel 并发消费者可以在Camel中共享数据的任何简单方式?,apache-camel,Apache Camel,我们有一个典型的场景,其中我们必须对一组克隆的使用者应用程序进行负载平衡,每个应用程序运行在不同的物理服务器上。在这里,我们应该能够动态添加更多的服务器以实现可伸缩性 我们考虑在这里使用循环负载平衡。但我们不希望服务器中的长时间运行作业导致消息在其队列中等待使用 为了解决这个问题,我们考虑为每个服务器应用程序配置2个ConcurrentConsumer。当一个线程处理一条旧消息,而一条新消息到达时,第二个线程将从队列中使用后者。在处理新消息时,第二个线程必须检查线程共享的类(全局)变量。如果“开

我们有一个典型的场景,其中我们必须对一组克隆的使用者应用程序进行负载平衡,每个应用程序运行在不同的物理服务器上。在这里,我们应该能够动态添加更多的服务器以实现可伸缩性

我们考虑在这里使用循环负载平衡。但我们不希望服务器中的长时间运行作业导致消息在其队列中等待使用

为了解决这个问题,我们考虑为每个服务器应用程序配置2个ConcurrentConsumer。当一个线程处理一条旧消息,而一条新消息到达时,第二个线程将从队列中使用后者。在处理新消息时,第二个线程必须检查线程共享的类(全局)变量。如果“开启”,则可以假定一个线程处于活动状态(即作业已在进行中)。在这种情况下,它将消息重新路由回其源队列。但如果类变量为“OFF”,则可以使用消息数据启动作业

作业本身很重,因此我们希望一次只处理一个作业。这就是为什么在另一个线程处于活动状态时,第二个线程会重新路由消息


因此,问题是“并发消费者是否有任何简单的方法可以在Camel中共享数据?”。或者,我们可以用完全不同的方式解决这个问题吗?

对于像ActiveMQ这样的JMS代理,您应该能够在同一队列上简单地使用并发侦听器。它应该循环使用,但只针对闲置的消费者。所以基本上这应该是可行的。最终,您必须将预回迁大小设置为1,因为预回迁可能会导致使用者接收消息,即使长时间运行的进程会阻止它们