服务事件与命令之间的消息传递

Yah*_*ein 3 c# masstransit saga microservices automatonymous

我试图了解服务之间的消息传递中使用的不同方法。

假设我们有一个场景,我需要第一个服务来通知另一个用户已请求创建产品,第二个服务应收到此消息,创建一个产品,然后响应告诉第一个服务一个产品已被使用。创建。

我认为命令和请求/响应一起适合这种情况,因为第一个服务将需要处理另一个特定的服务并等待反馈。

我的理解是:

事件与命令:

大事记:

  • 提供服务之间的松散耦合。
  • 执行发布到所有队列,对此消息感兴趣的服务将选择它。

命令:

  • 执行发送到特定队列的操作,因此只有使用该队列接收的服务才会使用它。

请求/响应与发布/订阅:

请求/响应:

在请求/响应中,第一个服务请求对方执行一个操作,并等待直到后面的响应返回为止。

发布/订阅:

第一服务仅发布消息并继续处理,而无需等待反馈或响应。

现在,我开始使用RabbitMQ和Masstransit saga(Masstransit.Automatonymous)一起设计消息传递系统,该事件似乎使用发布/订阅方法跟随事件。

我的问题是:

如何在发布中使用命令或在请求/响应中使用事件?

我的理解正确吗?可以将sagas与请求/响应一起使用吗?

Ale*_*rev 5

一般来说,您的理解是正确的。但是,我也会在这里总结一下:

  • 事件在发布/订阅中使用。消息已发布,所有订阅者都可以得到它们。发布者不知道有多少订阅者将获得该事件(如果有)。
  • 命令被发送到已知地址。只有一个订户,它将收到此消息。这是用于失火的。
  • 响应也会与其他元数据(如响应地址)一起发送到特定端点。因此,消费者可以执行所需的操作,然后将其发送回去。这是异步完成的,但是发送方等待响应。

具有自动名称的MassTransit sagas支持任何类型的消息处理。您需要映射佐贺消耗的所有消息作为状态机事件,但是这些消息既可以是命令也可以是事件-从技术上讲,这并不重要。Sagas可以发布和发送消息,也可以发送请求并等待答复。

当您对发布命令以及使用事件进行请求响应提出疑问时。从技术上讲,MassTransit在消息类型上没有区别。您发布的所有内容都是一个事件。您发送的东西可以是命令,也可以是其他东西,但这不是事件。使用请求响应时,必须发送到特定端点,因此绝对不是事件。