.NET可扩展发布/子服务实现

本文关键字:服务 实现 可扩展 NET | 更新日期: 2023-09-27 18:29:16

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

子系统包括:

  1. 发布/订阅服务

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

    • 作为Windows服务运行并使用pub/sub服务向用户发送信息的工作程序
  3. SignalR和WCF主机

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

我的问题是

  • 由于子系统在单独的进程中运行,我如何在pub/sub服务和其他子系统(如worker和IIS)之间进行通信。沟通必须非常迅速。我使用命名管道吗?它足够快吗

一个例子;工作人员告诉pub/sub系统向用户发送消息,pub/sup系统检查为用户打开的通道(比如SignalR通道),然后它必须通知IIS中运行的SignalR服务将消息发送到用户的浏览器。

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

观察

  • 我不能使用第三方服务总线服务(Azure..)。即使使用了。。我看不到解决上述问题的办法
  • 该服务必须具有很强的可扩展性和高需求性

.NET可扩展发布/子服务实现

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

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

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

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

我建议您研究一些用于.NET.

的现有服务总线技术

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

基本上,您将使用Application Initiated Custom Events

注册您的活动

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

并在需要时触发这些事件

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

.NET分布式缓存中的Pub/Sub设计模式

全面披露:我在阿拉奇软件工作