协调java中的依赖微服务

时间:2018-02-27 22:47:03

标签: java microservices orchestration

我必须协调5个单独的微服务,例如A,B,C,d,E

我需要创建一个协调器,它可以监视队列中是否有新的作业。如果A完成正常则应该向B发送休息请求然后如果一切正常(快乐路径)那么C一直被调用到E。

然而,B,C等可能由于某种原因而失败,例如:终点已关闭或凭据不足导致流在特定阶段失败。我希望能够创建能够检查失败作业状态并再次重新运行的内容,例如让我们再次尝试B,好吧现在它可以正常运行流程。

有关模式/框架的任何提示或建议。我喜欢一些相当简单且不复杂的东西。

我已经简要介绍了Netflix Conductor / Camunda,但理想情况下我喜欢不那么复杂的东西。

由于 w ^

2 个答案:

答案 0 :(得分:0)

  

有关模式/框架的任何提示或建议。我想要一些相当简单且不复杂的东西。

你所描述的是A,B,C,D和E的良好领域。因为字母之间的依赖关系和参与规则足够复杂,所以为这个领域创建专用服务是很好的。它可能就像这个由队列事件触发的总体服务一样简单。

唯一的另一种选择是在客户端执行更多操作并从那里组织服务调用。但出于安全原因或其他问题,这在每个域都不可行。

因为听起来你已经有一个事件队列,我不会推荐一个(Kafka)。

答案 1 :(得分:0)

与Camunda不同的是,Conductor是在一些Messaging Queue上发送一个来自Service A的事件(比如说kafka),它至少提供一次传递语义。

然后编写一个接收事件的消费者并进行编排部分(与服务B,C,D,E交谈)。

因为这些操作都需要是幂等的。首先在开始编排之前创建一个RequestAgg。来自A的事件并不断更新其状态以表示您在编排过程中的到达位置。

现在即使其他服务已关闭或您的节点出现故障。这应该到达终点,或者你也应该编写函数来回滚。

要检查状态和调试,您可以看到RequestAgg的读取模型。