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

时间:2013-01-24 07:51:47

标签: apache-camel

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

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

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

这些工作本身就是重量级的,因此我们希望一次只能处理一份工作。这就是为什么第二个线程重新路由消息,如果另一个线程处于活动状态。

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

1 个答案:

答案 0 :(得分:0)

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