0

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

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

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

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

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

4

1 回答 1

0

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

于 2013-01-24T08:50:45.780 回答