微服务如何在使用ESB(即MassTransit)时真正独立?

本文关键字:MassTransit 独立 服务 ESB | 更新日期: 2023-09-27 17:54:35

我正在做一些初步调查,通过使用MassTransit来分解当前的单片系统。我使用基于队列的ESB的主要原因是,我首先处理的一组特性实际上是将共享数据库用作队列。

我也一直在阅读"构建微服务",虽然我还没有看完,其中一个核心原则似乎是微服务本质上应该是独立的。

我如何协调使用必须共享消息库(或至少是契约)的MassTransit和这些服务不应该"知道"彼此的任何事实?

微服务如何在使用ESB(即MassTransit)时真正独立?

这个问题实际上是关于耦合的。您的各种服务是如何耦合的?"独立"意味着一定程度的松耦合,但是为了互操作,需要一定程度的耦合。挑战是在保持互操作性的同时尽可能松散地耦合,这将允许您的组件一起工作以实现您想要的结果。

通过消息契约的耦合是松耦合。这只需要您的每个服务都知道并理解在它们之间传递的数据(消息)的"形状"。这些服务不需要共享任何代码、主机甚至平台。

在使用ESB时,这种消息共享知识是您的服务之间唯一需要"知道"的东西。根据您使用的传输类型,您可能还需要为每个服务提供其他服务的位置(URI)知识,但是,这是一个非常松散的耦合(空间),可以通过DNS等方式进一步松散。如果你选择使用代理传输,例如像RabbitMQ这样的集中排队技术,那么这种空间耦合可以被移除,但这伴随着其他的权衡。

请记住,MassTransit不是。net空间中唯一可用的选项。例如,一个受欢迎的选择是NServiceBus(充分披露:我为special Software工作,NSB是我们的产品之一)。