Apache Camel路由规则引擎(一)

Apache提供的消息路由引擎,骆驼!

题图:from Zoommy

Camel是什么

核心是路由引擎,更精确地说就是路由引擎构造器。camel提供了统一的高级抽象api,开发者无需考虑消息来源或者消息目的地,甚至连协议都无需考虑,所有的这些都通过相同的api处理。

另外值得一提,Camel不是什么。他不是ESB(点击送你去度娘)

Camel的历史

Camel最初是在Apache ActiveMQ项目下的子项目,其功能就是做队列间的消息转发。随着其功能的不断完善,Camel被提升为Apache顶级项目。也因此,作为路由规则引擎被广泛使用。

这个项目被命名为Camel的原因有很多种;有说是因为开发成员喜欢Camel香烟的,有说是因为骆驼可以不吃不喝跋山涉水且负重颇高的,还有说是因为骆驼不会对它喜欢的人吐口水的。

Whatever,想象一下,Camel对你吐口水的那场景,:)。

Camel的功能和特性

  • 路由和规则引擎

    Camel的主要功能就是路由引擎,说白了就是消息分发。

  • EIPs (点击送你去豆瓣)

    ENTERPRISE INTEGRATION PATTERNS ,企业集成模式;是指为了解决系统间集成问题提出的多种模式,Camel几乎实现了所有的EIPs,并且有DSL与之对应;因此Camel是EIPs的实现者。

  • pojo模型

    Beans是Camel世界的一等公民,Camel倾向于用户使用Beans,带来的好处之一就是用户可以继承Camel内建的功能并自定义。

  • DSL、容易配置

    Camel有自己的领域语言,语法简洁,支持Java、XML、Scala、Groovy。可以方便的配置一个路由。

  • 内容格式无关、自动类型转换

    Camel没有规定消息格式,几乎可以以任意一种格式传递消息。能实现这样的工能,就是因为Camel内置了很多类型转换器,并且可以自动转换。

  • 可扩展组件库、模块化与插件化架构

    Camel的架构设计就采用了模块化和组件化的思想,因此添加第三方扩展组件以及自定义组件都很容易,此外Camel的组件库也很丰富。

  • 轻量级内核

    1.6MB的内核,应该可以算轻量级吧。

Camel小示例

  • 简单的队列消息转发
1
2
3
4
5
6
7
// 从一个消息队列分发到另外三个消息队列
from("jms:queue:" + Destination.TASK_FINISH_PUBLISH)
.to(
"jms:queue:" + Destination.CONSUMER_TASK_TASK_FINISH,
"jms:queue:" + Destination.CONSUMER_GROWTH_TASK_FINISH,
"jms:queue:" + Destination.CONSUMER_APPINFO_TASK_FINISH
);
  • 监听目录,如果有文件删除就复制一份到目标目录
1
from("file://inputdir/?delete=true").to("file://outputdir")

消息路由的意义

说了这么多,我们现在看到的功能无非就是消息的转发,有什么用呢,看起来很鸡肋啊。

其实不然,有了消息路由这个中间站,我们可以对消息自定义处理:

  • 分布式环境下的去重

  • 对消息进行包装

  • 分发到多个目的地

等等…消息在手,想怎么玩就怎么玩。

下一篇我们就来详细的说说Camel的原理。