Architecture 在这种情况下如何处理消息链接

Architecture 在这种情况下如何处理消息链接,architecture,rabbitmq,microservices,event-driven,Architecture,Rabbitmq,Microservices,Event Driven,我目前正试图找出解决以下问题的最佳方法 我们使用的是微服务体系结构,为了启用某些产品功能,它们需要以前的服务才能完成它们的工作 在下面的示例中,Service4要求Service1和Service2完成其任务 我正在考虑使用一个知道依赖哪个服务的编排服务 并按正确的顺序发布服务消息 但我想知道是否有一种方法可以避免这种编排服务,而完全使用编舞传奇 ┌────────┐ ┌───────►│Service1├───────┐ │ └

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

我们使用的是微服务体系结构,为了启用某些产品功能,它们需要以前的服务才能完成它们的工作

在下面的示例中,
Service4
要求
Service1
Service2
完成其任务

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

但我想知道是否有一种方法可以避免这种编排服务,而完全使用编舞传奇

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

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

展开正确的注释根据格言某些服务必须承担部分国家责任,我提交以下内容:

如果某个聚合任务的
服务1
服务2
完成仅与
服务4
相关-即,它不代表实际的功能流程完成-则
服务4
应负责跟踪部分状态

如果这两个服务已经完成这一事实具有某种独立的相关性(即使
service4
不存在),那么使用某种编排服务来聚合、实现规则和生成新事件是有意义的

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

编辑:因为您已经指出
服务-4
不是唯一关心其他两个服务已经完成这一事实的服务,所以添加(可能)更合适的服务是绝对有意义的


有许多选项,但通常我希望它监视
Service-1
Service-2
,以完成并生成一个新事件,
Service-4
将消耗该事件。

某些组件必须跟踪部分状态。编排服务除了保持状态外,还提供了对整个业务流的高度可视性。它还支持取消和异步更新事务状态等功能,这是使用编排非常困难的。查看temporal.io了解编排。在我们的例子中,
服务4
不是唯一需要
服务1
服务2
的服务,还有其他服务也需要在继续之前完成这些任务。所以我想我从一开始就朝着正确的方向走?是的,你走对了!在我的回复中添加了更多信息以供考虑。