我需要构建一个类似于发布/订阅系统的系统。它由多个子系统或服务组成,这些子系统或服务在单独的可执行文件中运行或作为 Windows 服务运行。
子系统是:
发布/订阅服务
- 管理内部子系统与用户之间通信的发布/订阅服务。
- 用户可以打开多个 channel (连接到 SignalR 服务的网页、连接到双工 WCF 服务的移动设备等)。
- 该服务应管理用户的所有 channel ,并能够根据主题或特定用户的需要向他们发送信息。
- 该服务必须支持多种传输方式,例如 SignalR、WCF 或其他......
worker 服务
- 作为 Windows 服务运行并使用发布/订阅服务向用户发送信息的工作人员。
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/