2012-05-30 162 views
2

我可以從另一臺機器或JVM訪問SEDA或VM隊列嗎?
我實際上想在Camel的幫助下實現負載均衡,但不希望爲此引入另一個消息框架。我只是想用生產隊列中的某些生產者將負載分配給不同的消費者。
這可能嗎?如果沒有,那麼我的選擇是什麼?
另一種方法:(拉方法) 不確定新方法有多麼優化或新方法的優點和缺點,請幫助我分析這種方法。
消息將被放入主隊列中,所有工作系統都將監聽主隊列。比方說100,000條消息正在放入主隊列中,5個工作系統正在監聽它。工作人員系統將從主隊列逐個處理消息。這種方法有兩大好處:使用Apache Camel進行負載平衡

  1. 我不需要擔心註冊我的工人系統與生產者。第六個系統啓動並開始監聽主隊列。
  2. 我不需要擔心發送消息給免費的消費者系統。當工作人員系統完成處理消息時,它會從主隊列中選取另一個系統。
    讓我知道你的想法。

回答

2

SEDA和VM://只能在同一個JVM上工作。

Java消息傳遞中的負載均衡通常使用JMS和Competing Consumers pattern來實現。您發送消息到隊列中,多個消費者競爭來處理它們。

如果經紀人的隊列成爲瓶頸 - 考慮使用扇出模式和經紀人網絡。

+0

你太棒了!你建議我需要的一樣! –

2

SEDA和VM端點分別對主機Context和JVM有效。爲了便於JVM到JVM消息傳遞,您將需要使用一個over-the-wire協議組件,例如但不限於Mina,HTTP或JMS。

1

最簡單的方法是使用jms。如果您有n個路由在相同的jms隊列上偵聽,那麼它們將自動負載均衡。如果一個人消失,負載將平衡在剩餘的負載上。我建議從ActiveMQ開始,因爲它非常易於安裝並與Camel集成得很好。要使代理高度可用,您可以設置兩個獨立代理或設置一個嵌入代理每個駱駝實例。

+0

我用Pull Approach更新了我的問題。 –