2011-09-20 26 views
1

我需要一個傳輸機制,它保證消息的全部命令廣播。用於.NET的羣組通信系統

例如,我有三臺機器,A,B和C,發送消息:A -> a0, a1, a2.. aN; B -> b0, b1.. bM; C -> c0, c1.. cK。如果其中一臺機器以某種順序接收消息(a0, a1, b0, c0, b1, a2...),則所有其他機器將以相同的順序接收所有消息!

我需要從.NET環境中使用這個東西。 NServiceBus或Mass Trnansit可以爲我完成這項工作嗎?

+0

你的意思是,如果A,B和C發送消息。其他機器會以相同的順序接收組合的交錯消息流? – AnthonyLambert

+0

不,所有包括A,B和C的機器都必須以相同的順序接收所有消息。每封郵件都必須發送給每個參與者,包括髮件人。這個問題被稱爲原子廣播,並已解決 - http://en.wikipedia.org/wiki/Atomic_broadcast。我正在尋找生產準備好的.NET實現。 – Lazin

回答

0

在發送之前不會簡單地將消息分配到集合中修復您的問題。所以當它被接收到時,所有的接收器都會一直按照相同的順序遍歷結果集。

+0

這隻適用於從一個源發送的所有消息的情況。但在這種情況下,所有消息都將以可預測的順序接收(如果使用像tcp這樣的傳輸)。在我的情況下,所有消息都從不同的來源同時廣播,並由每個參與者接收,每個參與者必須以相同的順序接收消息。 – Lazin

+0

實現此目的的唯一方法是不給每個消息分配所有消息的某種ID或序列號。並讓接收應用程序等待所有可能的結果,然後通過序列號/ ID獲取所有內容後對其進行排序。你想要做的事可以通過重新排序來解決。 http://www.eaipatterns.com/Resequencer.html – rpgmaker

+0

如果你真的看看JGroup,它不會做同樣的事情,你試圖不去做。即首先獲取所有消息,然後以同步方式從單個服務發送所有消息,這意味着無論發生什麼,每個接收方都將始終獲得FIFO效果。 – rpgmaker

0

像TIBCO EMS這樣的產品不能解決這些可靠的實時廣播和傳輸問題。這些API對包括.NET在內的大多數語言都有包裝。

+0

我認爲我不需要企業消息服務,我需要像JGroup這樣的羣組通信系統,它是一個完全不同的野獸。 – Lazin

+0

在這一刻,我實現了我需要使用集中方法的功能。有一臺服務器 - 序列器,它接收系統中的所有消息,然後以相同的順序將所有消息傳遞給每個參與者。但是這種方法不可擴展也不安全。 – Lazin