【问题标题】:How to handle message chaining in this situation在这种情况下如何处理消息链
【发布时间】:2021-08-01 01:07:49
【问题描述】:

我目前正在尝试找出解决以下问题的最佳方法。

我们正在使用微服务架构,为了启用某些产品功能,它们需要以前的服务完成它们的工作。

在下面的示例中,Service4 要求 Service1Service2 完成他们的任务。

我正在考虑使用一个知道哪个服务依赖的编排服务 并以正确的顺序发布服务消息。

但我想知道是否有办法避免这种编排服务并完全使用编排的传奇来完成它?

              ┌────────┐
     ┌───────►│Service1├───────┐  
     │        └────────┘       ▼  
┌────┴────┐                ┌────────┐ 
│  Start  │                │Service4│  
└────┬────┘                └───▲────┘  
     │        ┌────────┐       │  
     └───────►│Service2├───────┘  
              └────────┘ 

我主要担心Service4 必须记录它在数据库中收到的每条消息,并跟踪是否已收到任务所需的所有消息,并且必须重新实现相同的逻辑每个服务都有多个依赖项。

【问题讨论】:

  • 某些组件必须跟踪部分状态。除了保持状态之外,编排服务还可以很好地了解整个业务流程。它还支持取消和异步更新事务状态等功能,使用编排很难做到这一点。查看 temporal.io 进行编排。

标签: architecture rabbitmq microservices event-driven


【解决方案1】:

为了扩展 Maxim 上面关于某些服务必须承担部分状态责任的正确评论,我提交以下内容:

如果 Service 1Service 2 完成某些聚合任务仅与 Service 4 相关 - 即它不代表实际功能过程完成 - 那么 Service-4 应该负责跟踪部分状态。

如果这两个服务已经完成的事实具有一些独立相关性 - 即使Service 4 不存在 - 那么有某种编排服务来聚合、实施规则是有意义的,并生成新事件。

如果除了Service-4 之外没有人了解上述编排服务中的规则,这是一个好兆头,它们应该存在于Service-4.

编辑:既然你已经指出Service-4不是唯一关心其他两个服务已经完成的服务,那么绝对有道理添加(可能)更恰当地称为Choreography 服务的内容。

有许多选项,但总的来说,我希望它监视 Service-1Service-2 以完成并生成 Service-4 将使用的新事件。

【讨论】:

  • 在我们的例子中,Service 4 不是唯一需要Service 1Service 2 的服务,还有其他服务也需要在继续之前完成这些任务。所以我想我从一开始就朝着正确的方向前进?
  • 是的,你在正确的轨道上!在我的回复中添加了更多信息以供考虑。
猜你喜欢
  • 2014-05-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-12
  • 1970-01-01
相关资源
最近更新 更多