我正在尋找使用apache-camel來輪詢一個imap收件箱,但我想知道這個設置如何在羣集中表現。我會在羣集的每個節點上部署apache駱駝,並且每個節點都會輪詢收件箱。駱駝:如何同步競爭的imap消費者
如何避免讓許多消費者拿起相同的信息?
我正在尋找使用apache-camel來輪詢一個imap收件箱,但我想知道這個設置如何在羣集中表現。我會在羣集的每個節點上部署apache駱駝,並且每個節點都會輪詢收件箱。駱駝:如何同步競爭的imap消費者
如何避免讓許多消費者拿起相同的信息?
我決定走簡單的道路,不要安裝其他部件。我使用羣集石英作業來觸發收件箱的輪詢。然後,輪詢器將檢索命令放在Hazelcast分佈式隊列中,該隊列由羣集中的一組消息檢索組件接收。
安裝,Jms,James,除了駱駝聞到我之外,就是爲了解決這個任務。
是的,使用聚簇石英也是如此。它可以用於在單個主動節點上觸發。您可能不需要hazelcast,因爲您可以在觸發石英的同一節點上運行輪詢。但是如果您想要更多節點處理imap消息,則可以使用hazelcast分發工作。所以看起來你是最重要的。 –
我建議把這個標記爲回答 –
,只要我被允許,我會的。還得等上幾個小時。 – loteq
不是很容易,因爲imap實際上不是這些任務的協議。
訣竅仍然是讓一個消費者做投票,而不是很多。如果您有很多可用性較高的節點,那麼可以使用JMS做一些技巧來觸發IMAP調查。
例如,您可以使用jms觸發器消息來啓動輪詢,並讓羣集的所有成員都收聽該輪詢。使concurrentConsumer保持爲1並且異步。 JMS在Camel中禁用。您可以依賴消息組或ActiveMQ exclusive consumer確保只有一個節點獲取觸發器消息(當存活時,否則另一個節點將接管)。生成輪詢消息可能會非常棘手,但可以像來自每個駱駝節點的定時器路由那樣完成。只需調整頻率。
此設置將避免IMAP中的競爭條件,同時不會影響負載平衡,至少可以保護安全。這可能足以讓我們繼續進行併發輪詢,而幾乎沒有問題。但是,如果不允許一個消費者,我認爲你不會100%安全。
Hi Petter,這種方法看起來像我正在考慮的東西,但不知道該怎麼做。我想用一個hazelcast鎖來同步給定收件箱中所有潛在的IMAP客戶端,但不知道如何配置駱駝路由。 這個想法是讓一個組件首先在hazelcast中獲得一個鎖,然後將一個令牌轉發給IMAP組件。這將只允許羣集中的一個組件一次連接到給定的收件箱。你知道你將如何去配置路線嗎? – loteq
啊..這可能會奏效。雖然我從來沒有在Camel中使用過Hazelcast,所以我不確定這個設置是怎麼樣的。克勞斯答案看起來像一個優雅的方式來完成這項任務。 –
在集羣環境中,您可能會考慮選擇單個駱駝路由,該路由處於活動狀態,它執行imap輪詢。然後,如果節點發生故障,則具有故障轉移的邏輯。
在駱駝你可以看看可應用於路線的路線政策。 http://camel.apache.org/routepolicy
動物園管理員組件具有選擇羣集中的領導者的策略,並且只允許一條路徑處於活動狀態。這需要你使用zookeeper。 http://camel.apache.org/zookeeper
你好,我會回答一個建議,而不是一個答案,因爲我不知道你的底層架構。我將使用Apache James http://james.apache.org/和JMS作爲中間層。以下每個Camel節點應讀取由JAMES隊列生成的JMS消息。或者您可以將使用的郵件移至文件夾,但此解決方案無法擴展。 –