我希望使用apache-camel来调查一个imap收件箱,但我想知道这个设置在集群中的表现如何。我会在群集的每个节点上部署apache camel,每个节点都会轮询收件箱。
如何避免让很多消费者收到相同的消息?
答案 0 :(得分:3)
我决定采取简单的方法,而不是安装其他组件。我使用聚集的石英作业来触发收件箱的轮询。然后,轮询器将检索命令放置在Hazelcast分布式队列上,该队列由群集中的消息检索组件阵列接收。
安装,Jms,James,除了Camel闻到我的味道,只是为了解决这个问题。
答案 1 :(得分:1)
不是很容易,因为imap实际上并不是这类任务的协议。
诀窍仍然是让一个消费者进行投票,而不是很多。如果你有很多节点可以提供高可用性,你可以用JMS做一些技巧来触发IMAP民意调查。
例如,您可以使用jms触发器消息来初始化轮询,并让群集的所有成员都侦听该轮询。将concurrentConsumer保持为1并保持异步。在Camel中禁用了JMS。您可以依赖消息组或ActiveMQ exclusive consumer来确保只有一个节点获取触发消息(活动时,否则另一个节点将接管)。生成轮询消息可能很棘手,但可以像来自每个camel节点的定时器路径一样简单地完成。只需调整频率。
此设置将避免IMAP中的竞争条件,同时不会实现负载平衡,至少是故障转移安全。仅仅进行并行同步轮询可能已经足够好了,几乎没有问题。但是,如果不允许一个消费者,我认为你不会100%安全。
答案 2 :(得分:1)
在群集环境中,您可以考虑选择一个活动的Camel路由,这会进行imap轮询。如果节点出现故障,则为故障转移提供逻辑。
在Camel中,您可以查看可应用于路线的路线政策。 http://camel.apache.org/routepolicy
zookeeper组件具有用于选择群集中的领导者的策略,并且仅允许一个路由处于活动状态。这需要你使用zookeeper。 http://camel.apache.org/zookeeper