.NET阻止2个并行服务处理同一命令

时间:2020-09-24 11:26:06

标签: c# .net wcf microservices

我想为冗余和负载平衡目的并行部署Windows服务。

我如何确定当客户端向这两个服务发送请求时,只有其中一个能处理实际的呼叫?

示例:

当客户或其他服务发送消息以开始制造过程时,这两个服务都将收到该请求。我要确保这些服务中只有一个能处理此请求,以使制造过程不会两次开始!

他们需要能够与自己交谈吗? 有可能同步这些服务吗?

哪个是解决此问题的最优雅/最可靠的方法?

2 个答案:

答案 0 :(得分:0)

请考虑使用互斥锁,以允许这两种服务仅提取一条消息。

Mutex Description C#

尽管如此,您需要确保它可以按照您想要的方式工作。这可以帮助安排应用程序进程和边界之间的时间,但是如果将其部署到两台不同的计算机或云服务中,则互斥锁将无法正常工作。

为此,您需要弄清楚跨应用程序进行通信的另一种方式,通常使用数据库或MSMQ创建消息队列,您可以根据需要从每个服务中弹出消息。

答案 1 :(得分:0)

例如,最安全的方法也是最佳实践,这将是利用MSMQ从队列中检索(而不是窥视)消息。这为您提供了用例的清晰说明:https://docs.microsoft.com/en-us/previous-versions/windows/desktop/msmq/ms706253(v=vs.85)

〜皮诺