微服务管道之间的通信

Communication between microservices pipeline

我想在下一个基于 ASP.NET 核心的项目中使用微服务架构。

我可以通过 REST 在服务之间进行交换,但维护起来真的很繁重。

微服务之间是否有其他通信方式,例如通过像 vertx 这样的事件总线。

我可以使用 rabbitmq,但不知道它是否是一个好的选择。

我认为 Rabbit MQ 可以正常工作,特别是如果您有很多消费者,即需要负载平衡,and/or如果您需要消息持久化,并且从概念上讲,您的微服务也可以正在处理消息。

否则,既然您正在考虑使用 REST,我建议您改用 WCF。

直接忽略微软的例子,太复杂了。您需要制作一个包含协议(在 WCF 术语中,服务契约)+ 消息的程序集 send/receive(在 WCF 术语中,数据契约),它们将在您的服务之间共享。拥有共享程序集将使您摆脱那种企业风格的 XML 配置废话。这也将使维护比 REST 更简单,因为编译器将验证您的网络调用的正确性:您在更改协议后忘记更新一项服务,该服务将停止编译。

Here’s my demo 使用WCF在C#中实现零配置客户端-服务器通信。 它目前设置为使用命名管道绑定,即只能在本地工作。但是从 NetNamedPipeBinding 切换到 NetTcpBinding 很容易,这将很好地进行联网。

P.S。如果您选择 WCF,请不要忘记抽象可能会泄漏。任何网络调用都可能因任何与网络相关的异常而失败。此外,有时您需要重新连接(如果您不想,并且您每秒没有太多消息,您可以使用像 NetHttpBinding 这样的无连接协议,但这些协议的性能要低得多) .