1

我希望使用 apache-camel 来轮询 imap 收件箱,但我想知道此设置在集群中的行为方式。我会在集群的每个节点上部署 apache camel,每个节点都会轮询收件箱。

如何避免让许多消费者收到相同的消息?

4

3 回答 3

3

我决定走简单的路,不安装额外的组件。我使用集群石英作业来触发收件箱的轮询。轮询器然后将检索命令放在 Hazelcast 分布式队列上,该队列由集群中的消息检索组件数组接收。

安装,Jms,James,除了骆驼闻到我,就是为了解决这个任务。

于 2012-09-24T07:17:54.223 回答
1

不是很容易,因为 imap 并不是这类任务的真正协议。

诀窍仍然是让一个消费者进行轮询,而不是很多。如果您有许多节点以实现高可用性,您可以使用 JMS 做一些技巧来触发 IMAP 轮询。

例如,您可以使用 jms 触发消息来启动轮询并让集群的所有成员监听该轮询。保持 concurrentConsumer 为 1 和异步。在 Camel 中禁用了 JMS。您可以依靠消息组或ActiveMQ 独占消费者来确保只有一个节点获得触发消息(当处于活动状态时,另一个节点将接管)。生成轮询消息可能很棘手,但可以像每个骆驼节点的计时器路由一样简单地完成。调一下频率就好了。

此设置将避免 IMAP 中的竞争条件,同时不进行负载平衡,至少确保故障转移安全。继续进行并发轮询可能就足够了,几乎没有问题。但是,如果不只允许一位消费者,我认为您不会 100% 安全。

于 2012-09-22T22:50:21.277 回答
1

在集群环境中,您可以考虑使用一种方法来选择一个活动的 Camel 路由,该路由执行 imap 轮询。然后在节点出现故障时进行故障转移逻辑。

在 Camel 中,您可以查看可应用于路由的路由策略。 http://camel.apache.org/routepolicy

zookeeper 组件有一个策略用于选举集群中的领导者,并且只允许一个路由处于活动状态。这需要您使用 zookeeper。 http://camel.apache.org/zookeeper

于 2012-09-23T07:04:43.967 回答