2012-03-29 21 views
2

我需要構建一個類似於pub/sub系統的系統。它由運行在不同可執行文件中的多個子系統或服務組成,或作爲Windows服務。.NET可擴展的Pub/Sub服務實現

子系統是:

  1. 的發佈/訂閱服務

    • 甲發佈/訂閱服務中管理的內部子系統和用戶之間的通信。
    • 用戶可以打開多個通道(連接到SignalR服務的網頁,連接到雙工WCF服務的移動設備等)。
    • 服務應該管理用戶的所有渠道,並能夠根據主題或特定用戶的需求向他們發送信息。
    • 服務必須支持多種傳輸像SignalR,WCF,或其他...
  2. 工人服務

    • 運行爲Windows服務,將信息發送到用戶的工人使用pub/sub服務。
  3. 的SignalR和WCF主機

    • 的SignalR服務和WCF服務將在IIS託管

我的問題是

  • 由於子系統運行在不同的進程中,我如何在pub/sub服務和其他子系統(工作人員和IIS)之間進行通信。溝通必須非常快速。我是否使用命名管道,速度足夠快?

一個例子;工作人員通知發佈/訂閱系統向用戶發送消息,發佈/訂閱系統檢查爲用戶打開的頻道(假設是SignalR頻道),然後它必須通知在IIS中運行的SignalR服務發送該消息發送給用戶的瀏覽器。

  • 你知道類似系統的實現嗎?

觀察

  • 我不能使用第三方服務巴士服務(Azure的..)。即使這樣..我看不到上述問題的解決方案。
  • 該服務必須具有高度可擴展性和高要求的證明。
+0

您將如何使用WCF將數據「推」至移動設備?不同的移動設備可能有不同的「推」協議。圖表會有所幫助。 – 2012-03-29 20:12:46

+0

Aaaa ...雙工傳輸?你想要做什麼?我只是以WCF爲例。我可以輕鬆地實現移動設備使用的特定協議的傳輸... – 2012-03-29 20:41:06

+0

我需要關於服務本身的一些想法,以及如何託管WCF服務和SignalR服務我可以使用它們從Pub/Sub服務 – 2012-03-29 20:45:01

回答

1

如果問題是如何橋接SignalR與其他傳輸,有幾個解決方案。

在單個服務器上,您可以將它們與Reactive框架自帶的pubsub機制連接起來,該機制整齊地封裝在Subject類中。

如果您需要擴展到多個服務器,您需要使用現有的服務總線,或者可能使用SQL服務器和SqlDependency自己編寫簡單的服務器。

您也可以使用SignalR作爲與其他服務器通信的服務器上的客戶端,以在它們之間複製消息。

我建議你看看現有的一些用於.NET的服務總線技術。

+0

謝謝。請再次檢查我的問題,我不認爲這是第一次足夠清晰 – 2012-03-30 11:35:35

+0

我做了一些改變,希望現在更清晰 – 2012-03-30 11:42:28

+0

做一個。和c。同樣的事情:橋接SignalR和WCF的IIS託管應用程序。現在b。可以將消息推送到。,a。可以將消息分發給SignalR或WCF連接的客戶端。灣也可以連接到一個。訂閱消息。這是我答案中的'單一服務器',並且我提供了不需要使用其他服務總線的替代方案。 – 2012-03-30 15:38:13

0

有一篇文章清楚地解釋瞭如何在.NET應用程序中引入pub/sub設計模式的可能機制。答案在於使用.NET內存分佈式緩存,並將其集羣功能用作發佈訂閱介質。由於它是聚集的,因此您不必擔心停機時間。

基本上你將要使用的應用程序啓動自定義事件

註冊您的活動

public void OnApplicationEvent(object notifId, object data) 
{ 
    ... 
} 
_cache.CustomEvent += new CustomEventCallback(this.OnApplicationEvent); 

,每當你需要

_cache.RaiseCustomEvent("NotificationID", DateTime.Now); 

Pub/Sub design pattern in a .NET distributed cache

激發這些事件完整的信息披露e:我爲Alachisoft工作