仅用于微服务编排的单独微服务?

问题描述

我有一些微服务,每个微服务都有用于CRUD操作的REST端点。 我必须创建一个工作流程,该工作流程将从一个微服务开始,并带有一些初始输入,但是以后某个微服务的输出可以用作其他微服务的输入。可以对这些REST API进行一些同步和异步调用

我一直在寻找一些工作流引擎,但我认为我可以在不编写任何Java代码的情况下创建工作流。

我应该只为微服务编排编写一个单独的微服务吗?该业务流程微服务将了解确切的工作流程,并且可以为启动工作流程所需的输入进行配置,并且还可以使用某些第三方工作流程引擎(例如Camunda)来存储工作流程的定义。

为微服务编排提供单独的微服务是否正确?到现在为止,现有的微服务对其他微服务一无所知。在将某个微服务的输出用作其他微服务的输入之前,有可能需要对其进行按摩。

解决方法

我一直在寻找一些工作流引擎,但我不认为 我可以创建工作流程而无需编写任何Java代码。

这取决于您的业务流程和工作流程的复杂性。通常是的,您将需要编写一些代码来实现它。

我应该为微服务编写一个单独的微服务吗 编排?该业务流程微服务将确切知道 工作流程,并且可以配置为启动 工作流,它也可以使用一些第三方工作流引擎,例如 Camunda存储工作流的定义。

是的,您可以这样做。我在使用微服务的系统上做了类似的事情。从长远来看,这将是一个很好的主意,因为您也可以根据环境配置工作流程。例如,在您的开发计算机上,您的工作流程/配置会有所不同。这对于开发人员或质量检查人员测试其解决方案非常实用。另一方面,在暂存/生产中,您可以预定义客户设置/业务流程,如果您有新客户或新用户,则可以在任何时候重复使用。

是否有一个单独的微服务仅用于以下目的是否正确? 微服务编排?到现在为止,现有的微服务已经 对其他微服务一无所知。可能有机会 一项微服务的输出需要在使用之前进行按摩 其他微服务的输入。

是的,您可以毫无问题地做到这一点,尽管我会小心编排名称,因为它在微服务体系结构(Docker,Docker-Swarm,Kubernetes)的上下文中具有另一种含义。类似的例子是某种EndToEndTest或Cross微服务测试-微服务。这将测试跨微服务业务运营并确定结果。通常,业务运营涉及1个以上的微服务,因此为了测试您可以使用此方法。该微服务将从多个微服务中调用API,并根据您的业务规则测试结果和方案。另一个示例是诸如seeder-micro-service之类的东西(这似乎与您在此处尝试执行的操作非常相似)。该播种器微服务将负责将测试数据播种(创建)到您的微服务。该测试数据是一些基本的设置/配置数据,您需要这些数据才能使微服务业务流程正常运行。这对于需要快速设置环境的开发机器或某些测试环境非常方便。使用此播种器微服务,您可以轻松地设置工作或测试,并根据需要处置环境(数据)。这对于开发机设置特别有用,但也可以用于共享测试环境等。这两个示例都是微服务,可满足您的需求,并使您的生活更轻松地与系统一起使用。

关于此的最后说明:

到现在为止,现有的微服务都不了解其他微服务 微服务。

应该以一种不了解内部实现或数据(独立数据库)的方式将它们彼此抽象,但是应该彼此通信以执行有时是跨微服务的业务操作。就像网上商店示例中的微支付和订购微服务的典型示例。因此,他们彼此了解并进行交流是很好的,但是必须非常仔细地设计这种交流,以免出现一些常见的陷阱。 它们通常通过HTTP或某些其他协议的直接调用或通过诸如Apache Kafka或RabbitMq或其他消息队列的直接调用相互通信。您可以在此answer中详细了解它。

,

是的,您应该在单独的服务中涵盖业务流程部分。而且,是的,就像您已经怀疑的那样,将BPMN 2流程引擎用作协调器。是的,这可能包括编写一些主要用于数据映射或连接器的代码。 好处包括例如 ootb 支持:

  • 状态管理和长期运行的流程/数据的持久性
  • 版本(!)
  • 重试和错误处理
  • 用于在发生问题时修改状态和日期的工具
  • 超时,并行执行(如有必要)
  • 可扩展性
  • 图形过程模型
  • 审核线索
  • 基于BPMN 2模型的监视工具中的端到端可见性
  • 能够包含用于更复杂规则的业务规则任务(DMN)
  • 推拉式通信模式与异步通信的组合
  • 通过BPMN 2进行业务IT调整
  • 支持各种BPMN 2事件
  • 标准化(技能,安全性,软件质量,功能) ...

这是一篇有关WHY的很棒的相关文章,以机票预订为例: https://blog.bernd-ruecker.com/3-common-pitfalls-in-microservice-integration-and-how-to-avoid-them-3f27a442cd07

这是有关使用流程引擎的重要设计注意事项: https://blog.bernd-ruecker.com/the-microservice-workflow-automation-cheat-sheet-fc0a80dc25aa

,

我遇到了与原始问题类似的问题。我使用了一些需要管理的具有简单依赖项的微服务,并且确实沿着编写自己的微服务 https://github.com/pedro-r-marques/workflow 来管理依赖项和进行编排的道路。它使用 yaml 定义文件来描述依赖项和用于消息传递的 rabbitmq。还可以通过负载均衡器前端的 REST API 调用来代替rabbitmq 的使用。

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...