c# - .NET 可扩展的 Pub/Sub 服务实现

标签 c# .net wcf publish-subscribe signalr

我需要构建一个类似于发布/订阅系统的系统。它由多个子系统或服务组成,这些子系统或服务在单独的可执行文件中运行或作为 Windows 服务运行。

子系统是:

  1. 发布/订阅服务

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

    • 作为 Windows 服务运行并使用发布/订阅服务向用户发送信息的工作人员。
  3. SignalR 和 WCF 宿主

    • SignalR 服务和 WCF 服务将托管在 IIS 上

我的问题是

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

一个例子; worker 告诉 pub/sub 系统向用户发送消息,pub/sub 系统检查为用户打开的 channel (假设是 SignalR channel ),然后它必须通知在 IIS 中运行的 SignalR 服务发送发送到用户浏览器的消息。

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

观察

  • 我不能使用第三方服务总线服务 (Azure ..)。即使这样..我也看不到上述问题的解决方案。
  • 该服务必须具有很强的可扩展性和高要求证明。

最佳答案

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

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

如果您需要扩展到多台服务器,您需要使用现有的服务总线,或者使用 SQL Server 和 SqlDependency 推出您自己的简单服务总线。 .

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

我建议您查看一些用于 .NET 的现有服务总线技术。

关于c# - .NET 可扩展的 Pub/Sub 服务实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9919804/

相关文章:

c# - 最轻量级的 .NET 集合

c# - 未找到 WCF 端点

c# - 一个好的 WCF 客户端设计模式

c# - 在 C# 中实现阻塞队列

c# - Azure WCF 服务无法连接到 SQL Azure

.net - 如何在 ASP.NET Core 测试中 stub /模拟服务

database - C#: Exception handling with “using/try/catch” in WCF service

c# - 如何将树过滤到共同的 parent

c# - 如果我正在使用的 Web 服务超时,会抛出什么异常?

.net - Linq-to-Sql中的顺序GUID?