2012-11-13 20 views
1

我有一個節點網絡。節點必須能夠相互發送消息。消息只能從節點發送到節點(即沒有廣播)。節點知道他們必須發送消息的節點的地址。節點不一定知道他們將從誰那裏接收。一些節點(稱爲主節點)可能接收消息並將消息發送到非常多的節點(> 100k)。哪個消息服務用於Java中不可靠的網絡

我希望能夠從一個節點發送持久性消息到另一個節點。即使在不可靠的網絡上,我也希望這會異步發生。即我希望消息服務爲我處理重發,確認等。

我已經嘗試使用ActiveMQ與經紀人的靜態網絡(在我的小設置中只有2個節點),如在http://activemq.apache.org/networks-of-brokers.html中所解釋的。這對我的設置工作正常,但我預計將有大約100k節點與單個節點(稱爲主節點)相關聯,然後必須運行100k代理才能將消息轉發到所有關聯的節點。所有節點可能偶爾發送,主節點有時可能必須發送到其他節點的幾個(> 10k)(注意:沒有廣播,因爲它們都收到不同的消息)。

我想象中使用的一個設置可以在這張圖片http://i154.photobucket.com/albums/s260/sheep_p/communication.png中看到,其中柱面表示隊列。這裏每個節點都有一個入站隊列和一個出站隊列。

什麼技術可以用來實現這一點,需要什麼樣的配置這種技術?

該技術必須與Java協同工作並擁有免費的私人或學術許可。

+1

所以你想通過不可靠的網絡建立可靠的通信和高可擴展性?你有沒有檢查netty? –

+0

@ nikolay-kuznetsov感謝評論我一定會看看netty。回答你的問題:不,我以前沒有考慮過。 – abondoa

回答

1

我從來沒有遇到過可以做到這一點的開箱即用技術。

解決這個問題的一種方法是在內部使用隊列(ActiveMQ),如圖所示,並使用Netty.io或Jersey等服務創建API(我對Netty沒有經驗,但已經使用了Jersey對於類似的應用),外部。這需要一些編碼,但是嘿並不是那麼好? :)