“system.threading.channels”是否可以解决跨进程应用程序的发布子问题

use*_*018 2 c# asp.net-core system.threading.channels

我有一个 asp.net core 应用程序“A”,它每 1 分钟在一个文件夹中生成文件。

应用程序“B”想要一个通知或文件详细信息我们生成的文件以及该文件的一些哈希信息。根据此通知,应用程序“B”想要处理这些文件。

我正在考虑一些发布/订阅机制,我想要非常轻量级的组件,其中应用程序“A”将发布文件相关信息,应用程序“B”将订阅和侦听。

“system.threading.channels”会解决这个问题吗?

Mar*_*ell 7

简短版本:没有。

System.Threading.Channels是进程内的——Queue<T>在很多方面都非常相似,但是是为async访问而设计的;该 API 的任何部分都不允许 IPC。

有多种方法可以实现这种跨进程(并且可能是跨机器),但首先想到的选项是:

  • 让其中一个节点设置套接字服务器,并让另一个节点通过套接字进行连接;以这种方式互相发送消息
  • 相同,但使用命名管道而不是套接字
  • 相同,但有一个 http 服务器;kestrel 很容易设置为服务器
  • 使用外部消息代理或管道作为中介,并让两个节点作为客户端连接到该中介
  • 仅检测文件系统的更改