我在使用主/从设置开发的高可用Windows服务中遇到问题。
上下文
服务本身将数据同步到两个端点。一个端点同步到本地数据库,一个端点是外部数据库。本地数据库在两台计算机上都是重复的,因此主服务器和从服务器都需要同步。外部端点只需要同步一次。
Master将默认同步到外部服务,主服务器将在主服务器关闭时接管。当主设备重新启动并且从设备仍在与外部设备同步时,主设备将要求从设备完成部分工作,然后告诉主设备已完成,以便继续剩下的工作。
所有这一切都需要异步发生,我不希望程序停止并等待另一个响应(比如仍在处理数据的奴隶)。
我已经为此实现了所有逻辑。
设定:
在两台不同的计算机上运行两个Windows服务。 目前,通过命名管道进行通信。
问题:
命名管道对于正在进行的吞吐量来说不够可靠。它也经常崩溃,并且不会重新连接/关闭和重新打开很多次。我还面临着在发送/接收消息时只是“挂起”的问题。重试有时可行,但我想我不应该重试。我需要在两个实例之间进行可靠的通信。
解决方案:
我一直在寻找命名管道的替代方案,但似乎找不到我认为可行的解决方案。主要是因为很多技术都是通过http来实现服务和客户之间的通信。
WMS over MSMQ也不是我需要的,因为我只希望在两者都在线时进行通信。 WCF通常也更侧重于一个端点接收数据和发送响应。我需要双向通信,因此两个实例都需要能够随时接收和发送消息。
我认为我最好的选择是SignalR,但我也不相信。