c# - 使用 ESB(即 MassTransit)时,微服务如何才能真正独立?

标签 c# esb servicebus masstransit microservices

我正在对使用 MassTransit 分解当前的单体系统进行初步调查。我选择基于队列的 ESB 的主要原因是我首先要处理的一组功能是使用共享数据库作为一个队列。

我也一直在阅读“构建微服务”,虽然我还没有读完,但核心原则之一似乎是微服务本质上应该是独立的。

我如何协调使用必然共享消息库(或至少契约(Contract))的 MassTransit 以及这些服务不必“了解”彼此的任何信息这一事实?

最佳答案

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

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

使用 ESB 时,这种共享的消息知识是您的服务彼此“了解”的唯一内容。根据您使用的传输类型,您可能还需要为每个服务提供其他服务的位置 (URI) 知识,但同样,这是一个非常松散的耦合(空间耦合),可以进一步松散,例如域名系统。如果您选择使用代理传输,例如集中式队列技术,如 RabbitMQ,则可以消除这种空间耦合,但这会带来其他权衡。

请记住,MassTransit 并不是 .NET 空间中可用的唯一选项。例如。一个流行的选择是 NServiceBus (全面披露:我为 Particular Software 工作,NSB 是我们的产品之一)。

关于c# - 使用 ESB(即 MassTransit)时,微服务如何才能真正独立?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30739851/

相关文章:

c# - 无法将属性或索引器 'AnonymousType#1.FirstName' 分配给 -- 它是只读的

javascript - 是否可以从 C#(或 C++)获取 HTML 元素(如 iFrame、div 等)的窗口句柄?

找不到应用程序的 mule 配置

esb - 如何使用自定义 Mule ESB 路由器保留入站主机

c# - WebJob ServiceBusTrigger 消失在哪里了?

c# - 按降序排序不适用于 LINQ to Entity

java - Apache Camel 合并来自不同路径的两个文件

session - Azure、SubscriptionClient.OnMessage 和 session

java - Azure 服务总线队列 - JMS 消息监听器调用程序设置因目标异常而失败

c# - .NET Core 托管服务和单例服务的区别