2008-10-29 76 views
3

Observer模式是否有可能有多個聽衆通過MSMQ進行消息?與WCF MSMQ

WCF出現在服務方面,以框一切,使得通信的點,以點事。我想使用消息隊列來緩衝另一個在數據庫中記錄日誌的進程的傳入流量。

可能有任何數量的其他進程感興趣的監視傳入的流量,這積極乞求觀察者模式,但我不明白如何表達觀察者模式,至少不通過WCF使用MSMQ。

誰能告訴我這個?


的一些背景知識爲什麼我不在乎,這也可以說明這個問題:我有一個接受來自在該領域的小黑匣子連接請求Windows服務。它設置套接字,黑盒子發送消息,描述在時間和空間上用GPS位置標註的事件。

我解析從插座流消息分組,並且經由MSMQ它們發送到其過濾重複並且將分組寫入到數據庫表的另一過程。

有會從增量計算響應傳入流量中獲益後處理的任何數量,以及用戶工具也可以執行用戶通知響應傳入流量。

所以,我真的很想有一個進程發送消息,和幾個接收他們。其中一個接收器負責解析數據包內容並將消息轉錄成數據庫;這是終於從隊列中移除該消息的責任,一個明顯的候選人,但如何保證這是最後的處理程序處理消息的問題。

回答

3

我不相信MSMQ適當地設計自己來處理這種情況。對消息只能做兩件事 - Peek()或Get()。 AFAIK,沒有一個好方法來跟蹤消息是否已經被所有處理程序處理。

可能的工作是讓您的流程將訊息轉錄爲觀察者,然後在轉錄消息並寫入數據庫之前將消息(可能使用.NET事件架構)發佈給所有感興趣的觀察者。這將保證所有感興趣的觀察者都能看到該消息,並將消息正確寫入數據庫。

+0

哈珀,這正是我最終做的。我創建了兩個接口,IPublisher和ISubscriber,以及一個雙工綁定。記錄器是MSMQ端點,在數據安全地存儲在數據庫中後,它會通知任何訂戶。 – 2008-10-30 00:20:42

0

我想你需要一個Publish-Subscribe Channel

如何發送廣播事件給所有感興趣的接收者? 發送事件上的發佈 - 訂閱頻道,它提供了一個特別事件 的副本到每個接收器。

發佈 - 訂閱通道的工作原理是這樣的:它有一個輸入通道 其分成多個輸出通道,一個用於每個用戶。 當一個事件被髮布到通道中,發佈 - 訂閱 通道遞送消息的副本到每個輸出信道。 每個輸出通道僅具有一個訂戶,這是隻允許 消耗消息一次。通過這種方式,每個用戶只收到一次消息 ,消費副本從其頻道中消失。

此模式在MSMQ之上由MassTransitNServiceBus實施。