.NET可扩展的发布/订阅服务实现

时间:2012-03-29 05:55:55

标签: c# .net wcf publish-subscribe signalr

我需要构建一个类似于pub / sub系统的系统。它由在单独的可执行文件或Windows服务中运行的多个子系统或服务组成。

子系统是:

  1. 发布/订阅服务

    • 管理内部子系统与用户之间通信的发布/订阅服务。
    • 用户可以打开多个频道(连接到SignalR服务的网页,连接到双工WCF服务的移动设备等)。
    • 该服务应管理用户的所有渠道,并能够根据主题或特定用户按需向他们发送信息。
    • 该服务必须支持SignalR,WCF等多种传输......
  2. 工作人员服务

    • 作为Windows服务运行的工作程序,使用发布/订阅服务向用户发送信息。
  3. SignalR和WCF主机

    • SignalR服务和WCF服务将托管在IIS
  4. 我的问题是

    • 由于子系统在不同的进程中运行,我如何在发布/订阅服务和其他子系统(工作者和IIS)之间进行通信。沟通必须非常快。我是否使用命名管道,是否足够快?

    一个例子;工作人员告诉发布/订阅系统向用户发送消息,发布/订阅系统检查为用户打开的频道(假设是SignalR频道),然后它必须通知在IIS中运行的SignalR服务发送消息到用户的浏览器。

    • 你知道类似系统的实现吗?

    观察

    • 我无法使用第三方服务总线服务(Azure ..)。即便如此......我也看不到上述问题的解决方案。
    • 该服务必须具有很高的可扩展性和高要求性。

2 个答案:

答案 0 :(得分:1)

如果问题是如何将SignalR与其他传输桥接,那么有几种解决方案。

在单个服务器上,您可以将它们与Reactive框架自己的pubsub机制连接起来,该机制整齐地封装在Subject类中。

如果您需要扩展到多个服务器,您将需要使用现有的服务总线,或者使用SQL服务器和SqlDependency滚动您自己的简单服务总线。

您还可以将SignalR用作与其他服务器通信的一台服务器上的客户端,以便在它们之间复制邮件。

我建议您查看一些适用于.NET的 Service Bus 技术。

答案 1 :(得分:0)

有一篇文章清楚地解释了如何在.NET应用程序中合并pub / sub设计模式的可能机制。答案在于使用.NET In-Memory分布式缓存并将其群集功能用作发布订阅介质。因为它是集群的,所以你也不必担心停机时间。

基本上您将使用应用程序启动的自定义事件

注册您的活动

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

完全披露:我为Alachisoft工作