.NET 中服务之间的通信
Communication between services in .NET
我在使用 master/slave 设置开发的高可用 Windows 服务中遇到问题。
上下文:
服务本身将数据同步到两个端点。一个端点同步到本地数据库,一个是外部的。本地数据库在两台机器上都是重复的,因此主从都需要同步它。外部端点只需同步一次。
Master默认会同步到外部服务,slave会在master宕机时接管。当master回去,slave还在对外同步的时候,master会要求slave完成一部分工作,然后告诉master完成了,让他继续剩下的工作。
这一切都需要异步发生,我不希望程序停止并等待另一个响应(就像从机仍在处理数据)。
我已经实现了所有的逻辑。
设置:
两个 Windows 服务 运行 在两台不同的机器上。
目前通信是通过命名管道完成的。
问题:
命名管道对于正在完成的吞吐量来说不够可靠。它也经常崩溃,并且不是为 reconnecting/closing 而重新打开很多次。我还面临这样的问题,即当 sending/receiving 消息时它只是 'hangs' 很多。重试有时有效,但我认为我不应该重试。我需要在两个实例之间建立可靠的通信。
解法:
我一直在寻找命名管道的替代方案,但似乎找不到我确信可行的解决方案。主要是因为很多技术都是通过 http 在服务和客户端之间进行通信。
MSMQ 上的 WCF 也不是我所需要的,因为我只希望在两者都在线时进行通信。 WCF 通常也更专注于一个端点接收数据和发送响应。我需要双向通信,因此两个实例都需要能够随时接收和发送消息。
我认为我最好的选择是 SignalR,但我也不相信。
你看过MassTransit over RabbitMQ了吗?
几年来,我们一直非常成功地将它们用于内部服务和 client/service 通信。
我在使用 master/slave 设置开发的高可用 Windows 服务中遇到问题。
上下文:
服务本身将数据同步到两个端点。一个端点同步到本地数据库,一个是外部的。本地数据库在两台机器上都是重复的,因此主从都需要同步它。外部端点只需同步一次。
Master默认会同步到外部服务,slave会在master宕机时接管。当master回去,slave还在对外同步的时候,master会要求slave完成一部分工作,然后告诉master完成了,让他继续剩下的工作。
这一切都需要异步发生,我不希望程序停止并等待另一个响应(就像从机仍在处理数据)。
我已经实现了所有的逻辑。
设置:
两个 Windows 服务 运行 在两台不同的机器上。 目前通信是通过命名管道完成的。
问题:
命名管道对于正在完成的吞吐量来说不够可靠。它也经常崩溃,并且不是为 reconnecting/closing 而重新打开很多次。我还面临这样的问题,即当 sending/receiving 消息时它只是 'hangs' 很多。重试有时有效,但我认为我不应该重试。我需要在两个实例之间建立可靠的通信。
解法:
我一直在寻找命名管道的替代方案,但似乎找不到我确信可行的解决方案。主要是因为很多技术都是通过 http 在服务和客户端之间进行通信。
MSMQ 上的 WCF 也不是我所需要的,因为我只希望在两者都在线时进行通信。 WCF 通常也更专注于一个端点接收数据和发送响应。我需要双向通信,因此两个实例都需要能够随时接收和发送消息。
我认为我最好的选择是 SignalR,但我也不相信。
你看过MassTransit over RabbitMQ了吗?
几年来,我们一直非常成功地将它们用于内部服务和 client/service 通信。