c# - .NET 中服务之间的通信

标签 c# .net windows-services named-pipes

我在使用主/从设置开发的高可用性 Windows 服务中遇到问题。

上下文:

服务本身将数据同步到两个端点。一个端点同步到本地数据库,一个是外部的。本地数据库在两台机器上都是重复的,因此主从都需要同步它。外部端点只需同步一次。

Master默认会同步到外部服务,slave会在master宕机时接管。当master回去,slave还在对外同步时,master会要求slave完成一部分工作,然后告诉master完成了,让他继续剩下的工作。

所有这些都需要异步发生,我不希望程序停止并等待另一个响应(就像从机仍在处理数据)。

我已经为此实现了所有逻辑。

设置:

在两台不同的机器上运行的两个 Windows 服务。 目前,通信是通过命名管道完成的。

问题:

命名管道对于正在完成的吞吐量来说不够可靠。它也经常崩溃,并且不是为重新连接/关闭和重新打开很多次而设计的。我还面临发送/接收消息时它只是“挂起”很多的问题。重试有时有效,但我认为我不应该重试。我需要在两个实例之间建立可靠的通信。

解决方案:

我一直在寻找命名管道的替代方案,但似乎找不到我确信可行的解决方案。主要是因为很多技术都是通过 http 在服务和客户端之间进行通信。

基于 MSMQ 的 WCF 也不是我所需要的,因为我只希望在两者都在线时进行通信。 WCF 通常也更专注于一个端点接收数据和发送响应。我需要双向通信,因此两个实例都需要能够随时接收和发送消息。

我认为我最好的选择是 SignalR,但我也不相信。

最佳答案

你看过MassTransit了吗?在 RabbitMQ

几年来,我们一直非常成功地将它们一起用于服务内通信和客户端/服务通信。

关于c# - .NET 中服务之间的通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47290204/

相关文章:

visual-studio-2008 - Visual Studio在服务项目中缺少 “Add Installer”链接

c# - 如何将 TIFF 转换为 JPEG?

c# - RazorEngine 变量解析问题

.net - NuGet 的还原包坚持特定的包版本

c# - .cs 文件、项目和解决方案

windows-services - jenkins 服务无法在 Windows 2008 上启动

java - Wildfly - 如何在 Windows 上以域模式安装

c# - 如何在 VS 2015 中启用 C# 脚本?

c# - 如何将复杂类作为参数传递给 httpget

c# - 分类时,NEST搜索元数据丢失