gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:20:58 24 4
gpt4 key购买 nike

我在使用主/从设置开发的高可用性 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com