Apache骆驼还是工作流程,或两者兼而有之?
#开源 #java #workflow #apachecamel

在这篇文章中,我想讨论一个经常出现的主题,这些话题经常在围绕工作流程振动的封面。当您与在该领域有兴趣或经验的Java开发人员交谈时,尤其是常见的。

那么,您对本文有什么期望?

对Apache骆驼和工作流程的高水平比较 - 它们的共同点,它们之间的区别以及如何合并它们而无需选择一个或另一个,但要尽力带来终极解决您的业务问题。

Apache骆驼

Apache Camel是一个开源集成框架,使您能够快速,轻松地集成各种消耗或生产数据的系统

它真的很受欢迎,做得很好,它具有活跃的社区,并且一直在发展。我几乎可以在整合区域花费有关骆驼及其strenght的完整文章,但我主要想关注与工作流相比的许多情况。

让我们从骆驼的核心 - 路线开始。这些是要移动的集成逻辑的定义。它可以像在一个通道上接收消息,然后将该消息放在另一个通道上一样简单。但这也可能比这更复杂,它实现了涵盖系统集成区域的企业集成模式。但这也带有组件 - 允许路由连接到外部世界的连接器(消费者或生产者或两者)。

这些功能使骆驼也非常适合通常考虑工作流程的用例之一 - 服务编排。是的,它可以很好地做到这一点,尤其是当该编排无状态或短暂生活时。它可以很好地覆盖它 - 包括错误处理,重试,路由等。

因此,如果它太好了,为什么它没有替换工作流?

主要原因是状态 - 一旦用例需要执行的持续状态,骆驼就不会从开箱即用。而且,如果您问我,那真是个好设计决定。为此,工作流程更加准备,让我们从更多细节中实现。

工作流程

另一方面,

工作流并不是要集成的。或用于集成。关于工作流程的最大误解是它们仅用于服务编排。虽然这是常见用例之一,但不是唯一的用例。相反,工作流的全部力量与另一个 - 业务实体生命周期管理。这听起来可能很幻想,但是这个术语背后的想法实际上是将工作流程用作业务实体的完整生命周期的定义。

举一个例子,成像汽车行业,产品开发,其中最重要的业务实体之一是部分

  • 每件事都是由零件制成的
  • 零件已经定义了生命周期
  • 零件由系统和人类管理
  • 零件在各种情况下都组成并使用

能够清楚地定义零件的生命周期,该零件可以在任何时间点跟踪它,轻松地在外部各方进行交流是为组织带来最大价值的原因。这是工作流程最大的地方。

可以扣除,因此工作流的最佳景观是在州环境中。这意味着在执行完成后需要保留给定实例的数据。这带来了长期生活执行实例又称工作流实例的概念。工作流是两个主要部分的构建

  • 定义 - 它是一种蓝图,定义了可能发生的事情
  • 实例 - 这是蓝图的单独表示

同时有许多相同定义的实例,但是它们处于不同状态,持有不同的数据集,并且彼此完全隔离。
您可能会问可以将工作流程用于无状态用例吗?答案是 - 他们当然可以,在许多情况下,但这并不意味着应该始终使用它们。与所有内容一样,请使用合适的工具来工作...这将我们带到下一节 - 为什么不将两者都结合在一起以最终解决方案?

结合Apache骆驼和工作流程

我们从THIER功能的角度探索了Apache骆驼和工作流程(两者都可以做很多事情),所以让我们看一个想法,将这两种优势结合在一起:

  • Apache Camel具有连接到一切的绝妙能力
  • 其出色国家管理和人类参与者互动功能的工作流程

为了提供更多的详细信息,工作流程定义业务逻辑并在需要与外部系统(任何形式)交互时,将业务逻辑定义为骆驼。最重要的是,它应该是明确的 - 意味着通过查看工作流定义,您将直接知道存在集成。让骆驼在集成方面发挥魔力,让工作流程保持状态和数据控制。

这正是Automatiko所做的,它通过在工作流程中定义的消息传递概念来利用骆驼来实现集成目的。为了更确切地说,当它出现技术时,Automatiko使用反应性消息规范将Apache Camel和Workflow消息传递结合在一起。让我们看一个简单的示例,该示例使用骆驼文件组件观看文件夹,每个文件都启动了一个新实例。

Start workflow based on incomin file watched by Camel.

可以在上面的屏幕截图上看到,骆驼端点定义为工作流中定义的消息上的属性。更多详细信息,如何在Automatiko documentation

中找到消息传递(和骆驼集成)的工作

将两者结合起来将赋予建立Sofatiant的业务解决方案的大量力量,从而为团队带来可见性,并允许使用经过战斗测试的骆驼的集成能力。同时,不适合需要保留状态和数据的状态用例。

什么时候使用哪个?

这实质上是本文回答的主要问题。简单而简短的答案将是 - 如果您具有不涉及状态的纯整合用例,然后继续使用Apache骆驼 - 它是为此而设计和制造的。但是,如果您需要支持长期运行的实例,随着时间的推移(例如一天之后,一周之后)进行重试,或者您需要让人类演员参与,那么工作流程肯定会更好。

最后但并非最不重要的一点是,我想再次指出,不要将工作流程视为编排 - 即使许多供应商对这种用例有很多嗡嗡声,也认为更多用于表达您的业务逻辑您可能已经知道,工作流程也被称为业务流程,许多商业利益持有人对它们充分理解。

有兴趣了解更多吗?

这里有几个链接可以帮助您了解有关此处描述的概念的更多信息: