Apache Camel是一个基于Enterprise Integration Pattern(企业整合模式,简称EIP)的开源框架。EIP定义了一些不同应用系统之间的消息传输模型,包括常见的Point-to-Point,Pub/Sub模型。更多关于EIP的信息,可以参见这里
 
Apache Camel主要提供了以下功能:
1,实现了EIP的大部分模式,如果你要在不同的应用系统之间以不同的方式传递消息,那么你可以从Apache Camel中找到解决反感。
2,提供了大量Component(组件),每个组件都是一种消息中间件(或消息服务)的具体实现,每个消息中间件所用的协议都是不同的,因此,你可以通过多种不同的协议来完成消息传输。
3,允许用户定义灵活的路由规则,从这个角度来说,Apache Camel时一个规则引擎。
 
那么Apache Camel的应用场景有那些呢,这里列举一些:
 
1,消息汇聚,比如你有来自不同服务器的消息,有ActiveMQ,RabbitMQ,WebService等,你想把它们都存储到日志文件中,那么可以定义如下规则。
 
1 new RouteBuilder() {
2 @Override
3 public void configure() throws Exception {
4 from("amqp:queue:incoming").to("log:com.mycompany.log?level=DEBUG");
5 from("rabbitmq://localhost/A/routingKey=B").to("log:com.mycompany.log?level=DEBUG");
6 from("jetty:http://localhost:8080/myapp/myservice").to("log:com.mycompany.log?level=DEBUG");
7 }
8 }

from表示从这个endpoing取消息,to表示将消息发往这个endpoint,endpoint是消息地址,包含协议类型以及url。

 
2,消息分发,分为两种,顺序分发和并行分发。顺序分发时,消息会先到到第一个endpoing,第一个endpoint处理完成后,再分发到下下个endpoint。如果第一个endpoing处理出现故障,那么消息不会被传到第二个endpoint。比如有如下规则:
from("amqp:queue:order").to("uri:validateBean", "uri:handleBean", "uri:emailBean");
这个规则是从order队列中取订单信息,然后依次验证订单,处理订单,并发送邮件通知用户。任何一个步骤出错,下一个步骤将不回执行。
 
并行分发是将得到的消息同时发送到不同的endpoint,没有先后顺序之分,各个endpoint处理消息也是独立的。如果将以上路由改成
from("amqp:queue:order").multicast().to("uri:validateBean", "uri:handleBean", "uri:emailBean");
那么消息就会同时发到to所对应的endpoint。
 
3,消息转换,比如想将xml数据转换成json数据,可以使用如下规则。
 
from("amqp:queue:order").process(new XmlToJsonProcessor()).to("bean:orderHandler");
其中XmlToJsonProcessor是自定义的类,继承org.apache.camel.Processor,用于将xml数据转换成json。
 
4,规则引擎,你可以使用Spring Xml, Groovy这类DSL来定义route,这样无需修改代码,就能达到修改业务逻辑的目的。
例如上边的规则,from("amqp:queue:order").to("uri:validateBean", "uri:handleBean", "uri:emailBean");使用Spring Xml定义如下:
 
<route>
<from uri="amqp:queue:order"/>
<multicast>
<to uri="uri:validateBean"/>
<to uri="uri:handleBean"/>
<to uri="uri:emailBean"/>
</multicast>
</route>
 
如果需要在处理完订单后添加日志,可以改称如下规则
 
<route>
<from uri="amqp:queue:order"/>
<multicast>
<to uri="uri:validateBean"/>
<to uri="uri:handleBean"/>
<to uri="log:com.mycompany.log?level=INFO"/>
<to uri="uri:emailBean"/>
</multicast>
</route>
另外camel提供了大量的内置Processor,用于逻辑运算,过滤等,这样更加容易定移除灵活的route,例如:
 
from("amqp:queue:order").filter(header("foo").isEqualTo("bar")).choice()
.when(xpath("/person/city = 'London'"))
.to("file:target/messages/uk")
.otherwise()
.to("file:target/messages/others");
这条规则先对订单进行过滤,只处理header中foo的值为bar的订单,然后根据用户的城市进行将订单传给不同的endpoint。
 
 
Apache Camel的应用场景有很多,这里只是大致列举了几种。如果还不是很理解Camel的应用场景,你可以先到Enterprise Integration Pattern(企业整合模式,简称EIP)中去找对应的scenario,点击每种scenario下的链接,就能找到Camel对应的实现。
 
 
 
 

Apache Camel系列(1)----使用场景的更多相关文章

  1. [每日一学]apache camel简介

    apache camel 是轻量级esb框架.如下是它的架构图: 它有几个比较重要的概念就是: 1.endpoint,所谓的endpoint,就是一种可以接收或发送数据的组件.可以支持多种协议,如jm ...

  2. Apache Shiro系列之五,概述 —— 配置

    Shiro设计的初衷就是可以运行于任何环境:无论是简单的命令行应用程序还是复杂的企业集群应用.由于运行环境的多样性,所以有多种配置机制可用于配置,本节我们将介绍Shiro内核支持的这几种配置机制.   ...

  3. Apache Shiro系列四,概述 —— Shiro的架构

    Shiro的设计目标就是让应用程序的安全管理更简单.更直观.     软件系统一般是基于用户故事来做设计.也就是我们会基于一个客户如何与这个软件系统交互来设计用户界面和服务接口.比如,你可能会说:“如 ...

  4. Apache Shiro系列三,概述 —— 10分钟入门

     一.介绍 看完这个10分钟入门之后,你就知道如何在你的应用程序中引入和使用Shiro.以后你再在自己的应用程序中使用Shiro,也应该可以在10分钟内搞定. 二.概述 关于Shiro的废话就不多说了 ...

  5. Apache Camel

    Apache Camel 1 import org.apache.camel.CamelContext; import org.apache.camel.builder.RouteBuilder; i ...

  6. Apache Camel之FTP组件学习

    写在最前面 哎,最近提了离职,手头的活也基本上清理的差不多了.想着这个把月可以舒服的晃悠晃悠的离开,但是运维的小伙伴总是不架势,走之前还是提了个新需求. 先说下需求吧,我们的系统概括的讲就是一个接口系 ...

  7. spring boot + apache camel 传输文件

    一 sftp搭建略 这里简单说一下为什么使用sftp.ftp和sftp各有优点,差别并不是太大.sftp安全性好,性能比ftp低.ftp对于java来说并不复杂,效率也高.之所以使用sftp主要是可以 ...

  8. apache kafka系列之Producer处理逻辑

     最近研究producer的负载均衡策略,,,,我在librdkafka里边用代码实现了partition 值的轮询方法,,,但是在现场验证时,他的负载均衡不起作用,,,所以来找找原因: 下文是一篇描 ...

  9. [每日一学]apache camel|BDD方式开发apache camel|Groovy|Spock

    开发apache camel应用,最好的方式就是tdd,因为camel的每个组件都是相互独立并可测试的. 现在有很多好的测试框架,用groovy的Spock框架的BDD(行为测试驱动)是比较优秀和好用 ...

  10. Apache Camel继承Spring Boot 实现文件远程复制和转移

    pom.xml <dependency> <groupId>org.apache.camel</groupId> <artifactId>camel-f ...

随机推荐

  1. 缓存之ehcache 之使用

    1. EHCache 的特点,是一个纯Java ,过程中(也可以理解成插入式)缓存实现,单独安装Ehcache ,需把ehcache-X.X.jar 和相关类库方到classpath中.如项目已安装了 ...

  2. Codeforces Round 856 (Div2)

    Counting Factorizations 任何一个正整数 \(m\) 都可以被唯一的分解为 \(p_1^{e_1} \cdot p_2^{e_2} \ldots p_k^{e_k}\) 的形式. ...

  3. 震惊!推荐一款AI驱动的自动化测试神器:TestCraft

    在当今快速迭代的软件开发环境中,自动化测试已经成为确保软件质量的重要一环.然而,传统的手动录制和编写测试脚本的方式不仅耗时耗力,还难以跟上敏捷开发的节奏. 本文将为大家介绍一款基于AI技术的自动化测试 ...

  4. uniapp 使用pinpa 持续化更新

    安装依赖 npm i pinia npm i pinia-plugin-persistedstate 新建 index.ts import { createPinia } from 'pinia' i ...

  5. node-sass安装问题

    前情 最近在开发一个小程序项目,为了开发速度,部分页面使用原有H5,但原有H5需要对小程序做一定兼容适配,发现原有H5项目是个很古老项目. 坑位 在项目启动前,需要执行npm install安装项目依 ...

  6. 【二分+前缀和+后缀和】codeforces 2026 D. Sums of Segments

    题目 https://codeforces.com/problemset/problem/2026/D 题意 第一行输入一个正整数 \(n(1 \leq n \leq 3e5)\),第二行输入 \(n ...

  7. Nginx+ModSecurity(WAF) 加强 Web 应用程序安全性

    Nginx 和 ModSecurity 加强 Web 应用程序的安全性 在当今互联网时代,Web 应用程序的安全性变得尤为重要.为了保护应用程序和用户的数据免受恶意攻击和漏洞利用,使用合适的工具和技术 ...

  8. 转载 Netty tls验证

    https://blog.csdn.net/luo15242208310/article/details/108215019 目录Java ssl单向TLSServer端Client端双向TLSser ...

  9. 龙哥量化:注册simnow上期所的期货仿真模拟交易账户教程步骤

    永远顺着趋势交易 在技术分析这种市场研究方法中,趋势的概念绝对是核心内容.分析师所使用的全部工具, 诸如支撑和阻挡水平.价格形态.移动平均线.趋势线等等,其唯一的目的就是辅助我们估量市场趋势, 从而顺 ...

  10. Qt程序员必看/关于Qt收费的官方答复

    一.答复说明 Qt软件从诞生之日就是GPL/LGPL开源授权和商业授权并存的,开源不代表免费而是为了共享.关于您的问题,我做大致的回复. Qt商用版本的模块是否都是LGPL协议,所有模块是否存在GPL ...