Apache Camel 了解一下?

4,335 阅读5分钟

从我的角度来看,Apache Camel就像胶水,作为Java的粘合剂,将不同的程序服务连接在一起。

前言

何为 Apache Camel ?从本质上来说,Apache Camel 是 Java 的三方集成库。从使用者角度来说,它是一种语言,一组JavaAPI和一大堆组件,以便在不同计算机系统之间集成和处理数据。

从我的角度来看,Apache Camel就像胶水,作为Java的粘合剂,将不同的程序服务连接在一起。

解读 Camel

Apache Camel 是一个基于企业应用集成模式(EIP)的强大开源集成框架。官方对Camel的核心定义如下。

Camel is an Open Source integration framework that empowers you to quickly and easily integrate various systems consuming or producing data.

大概的意思是说,Camel 是一个开源的(企业应用)集成框架,它能够快速、轻松地集成,用于在各种系统之间消费或生产数据。

对于定义,我们有两点疑惑!

  1. 什么是企业集成模式,它对Camel意味着什么?
  2. 为什么Camel能在多种不同技术栈系统之间游刃有余呢?

企业集成模式(EIPs)

谈到企业集成模式,那要先讲讲什么是企业集成?

企业应用大多是构建在不同的技术栈上,那么企业之间不同技术栈的应用系统如何协同工作呢,那便是用到中间件,那中间件互相如何畅快的交流,让使用者无法感知中间件的存在呢?即如何屏蔽中间件?那便是在中间件之间放置一个中间件,即企业集成

说完企业集成,那么什么是企业集成模式(Enterprise Integration Patterns)呢?它是一本书《企业集成模式》,著于Gregor Hohpe 和 Bobby Woolf,其描述了企业应用集成的65种模式,并以模式语言的形式给出了面向消息的中间件。

Camel支持《企业集成模式》大部分企业集成模式,见官方文档

支持的模式主要包括几个分类

image.png 从中挑选几个常见的模式瞧瞧

image.png

image.png

image.png

组件

之所以Camel能在多种技术栈的系统之间快速集成,打通信息流,那是因为其拥有一个丰富的组件库,包含超过320个组件(核心和非核心的组件)。组件就像一个插头,允许系统连接到外部系统,比如邮箱、磁盘、FTP服务等等。

这样通过组件可用于解决简单的消息传递和数据传输问题,而且还可以提供数据安全性,不需要开发者在系统架构的基础设施层反复地造轮子。

部分核心组件

image.png

部分非核心组件

image.png

关于组件的介绍请查看官方介绍camel components

从我的角度来看,我们可以把组件视为创建断点的工厂。每当你需要将数据流入或流程时,你可以在组件库中找到合适的组件来执行这项工作,仅仅只需要两步,找组件,并使用它。

而且你可以放心大胆地使用组件,一是这已经通过社区千锤百炼地测试过了;二是它是开源的,符合商业合规使用的。如果可以,甚至你可以共享自己的组件。

全部核心概念

上面两个小章节其实就讲到了Camel 的两个核心概念

  • EIP,处理消息
  • Components,接受和发送消息(Endpoint)

除了上面提到的两个,还有两个核心,包括

  • Route ,即定义数据从那儿来,到哪儿去
  • Camel Context,是一个引擎(也可看做容器或者小型的应用服务器),用于运行和管理Route

image.png

对于Route 它是开发者在Camel中配置的对象,将数据从A点移动到B点,下面的代码是用Java语法表示将文件从一个文件夹移动到另外一个文件夹。

from("file:root/customers/new")
    .to("file:root/customers/old");

对于Camel Context 它是一个上下文容器,当Camel启动时,首先读取Route定义,然后创建Route,并讲路由添加到Camel Context里,然后启动Context。

当服务Camel终止时,Route将会被关闭,然后Camel 的上下文也会关闭。

总结

官方文档指出,Camel可以处理几乎所有的事情,包括从Http通信、磁盘读取、与Twitter、Facebook 等应用程序交流、与AWS、Azure等云服务提供商通信、与消息中间件交互等等,应有尽有。

Apache Camel 中间件的核心观点是把更多的时间放在对你企业有意义的代码上,Camel使得以有效的方式连接上百多个不同的异构服务端点变得简单和可扩展。它的组件驱动方法着重于在编写集成逻辑时减少模板代码。

总的来说,可以把Camel类比成一条管道,承接上游,内部处理后输送到下游,内部处理过程中,可以做比如更改、转换数据,或者传输到另一个管道等等。


本文对Apache Camel 做了一个很浅显的介绍,留下一个问题,Apache Camel 和MuleSoft ESB 企业服务总线有什么区别呢?欢迎留言下评论。

接下来的文章将关注于实现原理和实践,继续挖掘Camel的强大之处。

我正在参与掘金技术社区创作者签约计划招募活动,点击链接报名投稿