问题描述
我有多个微服务。每个微服务都有REST端点。 我想编排微服务以创建工作流。 Activiti可能吗?无需编写任何代码就可以吗?
假设每个微服务都获得一些输入并返回一些输出(可以用作下一个微服务的输入),Activiti可以提供一种将输出从一个微服务直接传递到另一个微服务的方法吗?
解决方法
Activiti当然可以用于微服务编排。但是有很多警告。 长时间运行的微服务(即不会立即返回结果)可能会阻止BPM流程,这可能不理想,服务可能需要身份验证并 有时,微服务会将结果放置在存储库或队列中,而BPM流程需要使用服务任务将其提取。 在以下Camunda博客文章中,有一篇不错的文章讨论了同步与异步调用:https://camunda.com/blog/2013/11/bpmn-service-synchronous-asynchronous/
尽管这是Camunda帖子,但Activiti可以轻松处理相同的模式。
另一个问题是您是否可以在不编写代码的情况下做到这一点。答案是取决于。同步ReST调用的最琐碎的编排可能无需编写代码即可处理,但是一旦开始使用异步服务,则结果可能不会放入ReST响应中,或者长期运行的服务调用,或者即使服务调用包含其他内容之外,基本身份验证,则可能需要编写一些Java Delegate服务任务。
,是的,任何处理引擎都可以这种方式使用。您很可能为数据映射/连接器编写了一些粘合代码。
使用BPMN2流程引擎覆盖业务流程部分的好处包括,例如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