【问题标题】:Use of Apache Camel in a Microservice Architecture在微服务架构中使用 Apache Camel
【发布时间】:2019-03-19 07:20:58
【问题描述】:

我观察到越来越多的人在微服务架构中使用 Apache Camel。例如,在 Openshift 容器平台上。

我很难理解为什么可以在微服务架构中使用企业服务总线,一个基本的单体。

也许 Apache Camel 用于编排?但这违背了微服务的精神。

有人可以告诉我吗?我无法解决这个问题。

【问题讨论】:

  • Apache Camel 不是 ESB,而是一个集成框架(基本上,Camel 只是您添加到现有应用程序并将它们嵌入在一起的一组 JAR)。有大量的文章、视频、博客等介绍了将 Camel 与微服务架构和容器技术结合使用。你可能会认为 Camel 是一个 ESB 或它的一些软体,因为 Camel 是在 11 年前创建的——但即便如此,它也一直被认为是一个轻量级的集成框架。它被用作一些 ESB(如 ServiceMix)和一些商业供应商产品的引擎。
  • 谢谢,我猜 Apache Camel 将在一个容器内运行,并充当部署在其他容器中的其他微服务的路由?
  • 您可以在容器中运行骆驼路线以与其他技术集成。例如,将 SOAP 转换为 REST 会很容易。
  • 是的,Camel 与您的微服务一起运行——(就像类路径上的一组附加 JAR)和 Camel,您的微服务可以轻松进行集成、路由以及 Camel 提供的功能。

标签: apache-camel openshift openshift-origin


【解决方案1】:

Apache Camel 不是 ESB。相反,它是一个轻量级集成框架,具有许多用于数据库、消息队列、流平台和流行 API 的连接器。它还支持近 50 种数据格式,并支持多种运行时,包括 Springboot 并支持 Quarkus 和 Camel 3。

为什么它非常适合微服务?

  • Springboot 支持和 Quarkus 支持(除了 atm 之外没有任何 micro)。
  • 每个微服务都需要与其他服务或外部世界进行通信,而 Camel 的多组件集成工具包,数据格式使其变得容易。
  • REST DSL 使得组合 REST 接口变得非常容易
  • JMS 和 Kafka 组件使事件驱动的微服务开发变得容易。
  • OpenTracing 支持支持分布式跟踪。
  • 通过 JMX 导出的指标(可与 prometheus jmx 导出器一起使用)有助于检测您的骆驼应用程序。

希望这会有所帮助。

【讨论】:

    【解决方案2】:

    我很难理解为什么可以在微服务架构中使用企业服务总线,一个基本的单体。

    ESB 具有多种对微服务架构有用的功能。它启用:

    • 消息调解与转换,见Enterprise Integration Patterns
    • 跨服务策略实施(例如消息级安全性、授权等)
    • 服务端点与其实现的解耦(服务版本控制)
    • 提供商品服务,例如消息传递、事件处理、监控、异常处理……
    • 减轻点对点通信
    • .. 更多..

    确实,ESB 通常作为单独的应用程序(或您的情况下的容器)运行,并且在实现了所有功能后,它并不总是最轻量级的应用程序(与简单的单一用途微服务相比)。如果实施得当,ESB 对响应延迟或基础架构负载的影响应该很小。

    提供商品服务和跨服务功能恕我直言,您可以不将 ESB 视为单独的服务,而是微服务实现可用的基础设施服务的一部分。

    也许 Apache Camel 用于编排?但这违背了微服务的精神。

    Apache Camel 是一个框架,它可以在应用程序中独立使用,也可以在 Apache Camel 之上构建 ESB 产品(RedHat Fuse ESB、Talend ESB、Apache ServiceMix 等)。

    【讨论】:

      【解决方案3】:

      Camel 有一个用于编写流程和编排服务的 java/kotlin DSL。

      Camel 有一组集成组件,使其能够集成到不同的端点/协议。

      DSL 为您提供了一种用于编写编排流程的标准“语言”——使用流利的模式。

      Camel 还有一个测试框架,可以轻松编写流测试和模拟端点。

      Camel 支持如何处理异常、重试、幂等消费者(https://camel.apache.org/components/latest/eips/idempotentConsumer-eip.html)

      Camel 实现了一套企业集成模式, 见https://camel.apache.org/components/latest/eips/enterprise-integration-patterns.html

      做很多微服务的时候,不把服务分组,可能会有点乱……

      Camel 为您提供了将所有内容绑定在一起的额外工具。

      它不应该将它与流式或响应式编程、Kafka 流式 API 等混为一谈......它在这些东西之上......

      【讨论】:

        最近更新 更多