Camel使用场景

Apache Camel的认识和应用详解 apache camel官网:https://camel.apache.org/apache camel 是轻量级ESB框架(什么是ESB框架?endpoint,所谓的endpoint,就是一种可以接收或发送数据的组件。可以支持多种协议,如jms,http,file等。processor,它是用来处理具体业务逻辑的组件。route,用来路由,指示数据从哪里来到哪里去,中间用哪个processor处理。 阅读详情

Camel使用场景

Apache Camel是一个基于Enterprise Integration Pattern(企业整合模式,简称EIP)的开源框架。EIP定义了一些不同应用系统之间的消息传输模型,包括常见的Point-to-Point,Pub/Sub模型。

 

Apache Camel主要提供了以下功能:

1,实现了EIP的大部分模式,如果你要在不同的应用系统之间以不同的方式传递消息,那么你可以从Apache Camel中找到解决方案。

2,提供了大量Component(组件),每个组件都是一种消息中间件(或消息服务)的具体实现,每个消息中间件所用的协议都是不同的,因此,你可以通过多种不同的协议来完成消息传输。

3,允许用户定义灵活的路由规则,从这个角度来说,Apache Camel时一个规则引擎。

 

 

那么Apache Camel的应用场景有那些呢,这里列举一些:

 

1,消息汇聚,比如你有来自不同服务器的消息,有ActiveMQ,RabbitMQ,WebService等,你想把它们都存储到日志文件中,那么可以定义如下规则。

new RouteBuilder() {

    @Override

    public void configure() throws Exception {

        from("amqp:queue:incoming").to("log:com.mycompany.log?level=DEBUG");

        from("rabbitmq://localhost/A/routingKey=B").to("log:com.mycompany.log?level=DEBUG");

        from("jetty:http://localhost:8080/myapp/myservice").to("log:com.mycompany.log?level=DEBUG");

    }

}

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,用于逻辑运算,过滤等,例如:

 

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。


Camel 和rabbitmq 集成处理

camel可以看作是java中的一个编程范式,通过DSL语言来编写路由规则。

camel 核心

camel是一个基于规则路由和处理的引擎,提供企业集成模式的Java对象的实现,通过应用程序接口或称为陈述式的Java领域特定语言(DSL)来配置路由和处理的规则。
其核心的思想就是从一个from源头得到数据,通过processor处理,再发到一个to目的的.

发散:像是网络中超强的路由器规则,是否可以看做是软件定义的交换机?

这里的from和to可以是我们在项目集成中经常碰到的类型:一个FTP文件夹中的文件,一个MQ的queue,一个HTTP request/response,一个webservice等等。

现在的问题是 什么是java领域特定语言(DSL)?

Camel uses a Java Domain Specific Language or DSL for creating Enterprise Integration Patterns or Routes in a variety of domain-specific languages (DSL) as listed below.
Java DSL - A Java based DSL using the fluent builder style.
Spring XML - A XML based DSL in Spring XML files
Blueprint XML - A XML based DSL in OSGi Blueprint XML files
Rest DSL - A DSL to define REST services using a REST style in either Java or XML.
Groovy DSL - A Groovy based DSL using Groovy programming language
Scala DSL - A Scala based DSL using Scala programming language
Annotation DSL - Use annotations in Java beans.
Kotlin DSL - Work in progress - Currently developed outside ASF, but will we included later in Camel when Kotlin and the DSL is ready.
The main entry points for the DSL are
CamelContext for creating a Camel routing rulebase
RouteBuilder for creating a collection of routes using the routing DSL—http://camel.apache.org/dsl.html
也就是说camel可以使用多种方式配置,包括Java xml等。

这里主要关注java DSL,java DSL的语法主要是什么呢?
RouteBuilder类就是Java的smart DSL。

public abstract class RouteBuilder
extends BuilderSupport
implements RoutesBuilder
A Java DSL which is used to build DefaultRoute instances in a CamelContext for smart routing.

主要的方法有:

public abstract void configure()
throws Exception
Called on initialization to build the routes using the fluent builder syntax.
This is a central method for RouteBuilder implementations to implement the routes using the Java fluent builder syntax.

configure()就是主要的实现路由语法的函数。
主要的路由配置的方法我整理成了一张表格:

语法作用语法
from路由的起点from(String uri),返回the builder
to路由的终点参数String uri,返回the builder
choice(when,otherwise)选择某个内容以choice开头,when表示某个条件
fromF/toF使用String formatting创建URI和from/to类似
filter选择某个内容过滤想要的内容
process对内容进行一定的处理需要编写继承自Processor接口的类,实现process方法,完成对Exchanage(交换内容)处理的逻辑

Processer接口用于处理消息转换或者消息交换。

来自网络的一个简单例子:
这里写图片描述
这里实现了一个简单的路由,这里的起点是DefaultCamelConetxt,那么DefaultCamelConetxt这个类是怎样的?

public class DefaultCamelContext
extends ServiceSupport
implements ModelCamelContext, SuspendableService
Represents the context used to configure routes and the policies to use.

也就是说DefaultCamelContext类代表了配置camel路由的上下文,和一些必要的策略,DefaultCamelContext继承自Service,可以使用start,stop等基本的管理生命周期的方法。
让camel引擎开始工作使用start方法,对应的停止工作的方法是stop。使用addRoutes方法给camelContext添加对应的路由。
下图表示了一个继承自Processor类的基本的实现,
这里写图片描述
主要的逻辑是对Exchange进行操作,来达到想要的目的。上图的逻辑是将a文件所有的行连成一行,以空格分隔组成一个新的文件给to对应的终点uri。
前面讲了一个简单的这里,到这个时候,还需要补充一些基本的概念。

camel一些定义

补充的概念有Uris,EndPoint,Exchange,Message等

关于uris的官方解释: Camel makes extensive use of URIs to allow you to refer to endpoints which are lazily created by a Component if you refer to them within Routes.

意思是,uris的作用就是用来指向组件的endpoint的一种表示方法。

那么endpoint呢?

官方解释: public interface Endpoint extends IsSingleton, Service
An endpoint implements the Message Endpoint pattern and represents an endpoint that can send and receive message exchanges

endpoint就是一个可以收发消息的组件,组件component就是一个一个的camel组件的术语代表。

那么,message呢?

public interface Exchange An Exchange is the message container holdingthe information during the entire routing of a Message received by a Consumer.

public interface Message Implements the Message pattern and represents an inbound or outbound message as part of an Exchange.

Exchange是message容器,message有属性inbound和outbound,是Exchange的一部分。比如上面的处理器使用exchange的getIn()方法可以得到message本身。

目前我写的一系列文章都是讲的clojure,比如语法和数据处理,同样我本文的目的依旧是讲camel在clojure中的应用,讲的更具体一点的话,其实是谈论camel在clojure 微服务中的使用方法。


springboot 整合 apache camel实现企业级数据集成和处理_camel springboot 现在让我们使用Spring bean方法创建一个获取产品的路由。我们通过扩展RouteBuilder类并覆盖其配置方法来创建camel路由,以Java域特定语言(DSL)定义路由规则。每个路由器类实例化一次,然后用CamelContext对象注册。在这里,我们通过扩展RouteBuilder类,在FetchProductsRoute类中定义Java DSL来创建路由。 阅读详情

相关推荐

PADS Layout差分对布线实战:从规则设置到高速信号优化

本文详细讲解了在PADS Layout中进行差分对布线的完整实战流程。从在Layout中定义差分对网络,到进入Router配置线宽、间距等关键规则,再到布线实战技巧与高速信号完整性优化,系统阐述了如何确保差分信号(如USB、HDMI)的稳定传输,是高速PCB设计的核心技能。

weixin_29274969的博客 522

Apache Camel简介以及使用场景

Apache Camel简介以及使用场景我们要解决的问题以及解决方案我们要解决的问题EAI的常用解决方案SOA架构模型ESB企业服务总线如何实现ESB为什么使用CamelCamel可以做什么Apache Camel简介Camel的应用场景Camel的核心要素EndpointExchangeProcessorRoutingServiceCamelContext上下文 我们要解决的问题以及解决方案 我...

GuoDa_的博客 1万+

从“破解”到应用:三菱数控系统M80协议逆向分析与工业数据采集网关搭建指南

本文深入解析三菱数控系统M80协议的逆向分析方法与工业数据采集网关搭建技术。通过TCP协议实现跨平台通信,详细介绍了M80协议的数据包结构、多语言实现方案(C#、Java、C/C++)以及Linux数据采集网关的架构设计与容器化部署。为工业自动化领域的开发者提供从协议分析到企业级数据采集落地的完整解决方案。

weixin_29228781的博客 1212

Camel实战第二版 第一章 初识Camel

目录 第一部分:迈出第一步 第一章:初识Camel 第二章:Camel路由 本章包含: Camel介绍 Camel的主要功能 初次使用Camel Camel的架构与概念 从零开始构建一个复杂的系统代价非常高昂,这种从轮子开始造起的做法几乎从未成功过。风险更低、更有效的方法是利用那些已有的、经过验证的组件,像玩拼图一样将他们组装起来,形成一个大的系统。我们每天都在使用着用拼图一样拼出来的各种综合系统,使一切成为可能,从电信、金融银行、医疗到旅游、娱乐,各行各业,方方面面。 要完成一个大拼

xiaokanfuchen86的博客 3226

3D Slicer的学习(二) 图像的分割

先对不同层级标注,然后点击Fill between slices -> Initialize -> Apply拖动层级颜色区域就会变成连续自适应的动态变化区域。如图,点击Level tracing,在图像上放置鼠标,会显示可能想要选中区域的轮廓,点击鼠标右键会将其显示为蓝色。然后点击Grow from seeds -> Initialize -> Apply,显示3D之后会自动扩展到其他位置的相同部位,从而展示整个部位。如图为copy之后,将黄色区域的颜色复制到原本的绿色区域。

tuweibazong的博客 6080

华为防火墙USG6000系列多ISP上网(通过WEB界面设置)

华为防火墙多ISP上网,内网分区上网。内网多网段不同上网方式。

daxihe880的博客 1万+

Camel框架的快速认识和使用

Camel框架的快速认识和使用   Camel流程框架是Apache下的一个开源项目,是较为成熟的流程框架。在web项目中也可以无缝地集成于Spring当中。   一、简单使用   引入camel相关的jar包:camel-core-2.10.4.jar。 1、经典的入门示例——文件移动     public class FileMoveWithCamel { ...

TuxedoLinux的博客 3750

Prometheus-2.53.1安装

Prometheus+Grafana安装

qlj062127的博客 1787

Apache Camel快速入门【下】

LRU的全称是Least Recently Used(最近最少使用),它是一种选择算法,有的文章中也把LRU算法称为“缓存淘汰算法”。在计算机技术实践中它被广泛用于缓存功能的开发,例如处理内存分页与虚拟内存的置换问题,或者又像Camel那样用于计算选择Endpoint对象将从缓存结构中被移除。下图的结构说明了LRU算法的大致工作过程:上图中,我们可以看到几个关键点:整个队列有一个阀值用于限制能够存放于队列容器中的最大元素个数,这个阀值我们暂且称为maxCacheSize。

扬帆天涯 1336

宏基因组功能注释实战:从CAZyme到VFDB的完整流程(含数据库下载与脚本优化)

本文详细介绍了宏基因组功能注释的完整流程,涵盖CAZyme、eggNOG、CARD和VFDB四大核心数据库的实战应用。从环境配置、数据库下载与预处理到注释流程执行与优化,提供了全面的操作指南和脚本优化建议,帮助研究人员高效完成宏基因组数据分析。特别针对CAZyme注释等关键步骤给出了参数优化方案和常见问题排查方法。

weixin_29289821的博客 295

ADS基础教程24 - Gerber文件的导入

一、引言二、基本概念1.仿真文件下载2.仿真文件介绍二、导入步骤1.新建workspace2.选择Layout结构3.导入设计4.选择文件类型5.导入文件6.预览文件内容7.铜皮离散问题四、总结选择。通过本文章结束,可以了解ADS中如何将导入Gerber文件,并且对导入的铜皮进行合并。下一步就针对导入的文件进行层叠设置和编辑。END!}}END!

XZ_ZC的博客 3053

Apache Camel 概念及使用场景

原博客地址:http://www.cnblogs.com/zengbiaobiao2016/p/5480992.html Apache&nbsp;Camel是一个基于Enterprise&nbsp;Integration&nbsp;Pattern(企业整合模式,简称EIP)的开源框架。EIP定义了...

JLow 2万+

全桥 LLC 谐振变换器详细解析:结构 + 控制 + 工作原理全搞懂!

在现代高效率电源系统中,LLC 谐振变换器🔥早已成为降损利器。尤其是全桥 LLC 拓扑结构,由于其在、副边整流管的 ZCS(零电流关断),再加上优秀的效率表现,已经成为服务器电源、电动汽车 OBC、光伏逆变等场景的首选。那么,全桥 LLC 到底长啥样?它的控制方式是怎么回事?具体工作波形又是如何呢?今天我们就来一篇讲清楚、讲透彻的文章!🚗💨。

weixin_43199439的博客 3517

Apache Camel系列(1)----使用场景

原博客地址:http://www.cnblogs.com/zengbiaobiao2016/p/5480992.html Apache Camel是一个基于Enterprise Integration Pattern(企业整合模式,简称EIP)的开源框架。EIP定义了一些不同应用系统之间的消息传输模型,包括常见的Point-to-Point,Pub/Sub模型。更多关于EIP的信

m0_37683086的博客 6771

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

apache camel 相关配置_什么时候使用Apache camel

什么时候使用Apache camelEnterprise Application Integration 企业应用集成(EAI)企业应用集成是必要的,几乎每家公司都有很多新产品及应用,如何集成这些应用程序是一个问题。来每十年诞生一个新范式,例如客户端/服务器通信,面向服务的架构(SOA)或云计算。此外,不同的接口或协议和技术的出现。过去数据存储在文件,SQL数据库在今天很通用。有时,还需要NoSQ...

weixin_39998795的博客 176

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

使用CAMEL创建第一个Agent Society

🐫 CAMEL 是一个开源社区,致力于探索代理的扩展规律。相信,在大规模研究这些代理可以提供对其行为、能力和潜在风险的宝贵见解。为了促进这一领域的研究,实现了并支持各种类型的代理、任务、提示、模型和模拟环境。GitHub地址:https://github.com/camel-ai/camel。

mingupup的博客 1065

groovy使用_使用Groovy的Apache Camel简介

groovy使用 在他们的网站上,它说Apache Camel是一个基于已知企业集成模式的通用开源集成框架。 定义看似模糊,但我想告诉您,这是一个非常有生产力的Java库,可以解决许多典型的IT问题! 您可以将其视为包含“电池”的非常轻巧的ESB框架。 到目前为止,在我所从事的每项工作中,人们都以一种或另一种方式编写自己的解决方案以解决许多常见问题(或者他们会购买一些非常昂贵的企业级ESB服...

1017

Apache Camel 中 ProducerTemplate

摘要:Apache Camel 的 ProducerTemplate 是一个关键接口,用于将消息主动发送到路由端点。它提供多种发送方法(如 sendBody 和 requestBody),支持同步/异步消息传递,并允许添加消息头。典型应用场景包括 REST 请求处理、定时任务和测试。模板线程安全,使用后应关闭,且端点 URI 需预先声明。作为连接业务代码与 Camel 路由的桥梁,它简化了消息驱动应用的开发。

ttyy1112的专栏 519

Camel In Action 第七章 理解camel组件

第七章 理解camel组件 本章包括: camel组件预览 使用file、database组件 JMS组件 CXF web service MINA组件 内存消息 自动任务:Quartz 和 Timer组件 7.1 camel组件预览 组件是Camel主要的扩展点。从Camel的第一个版本到Camel的当前版本,Camel的组件列表迅速增长,目前已有80

daydaylearn的专栏 8439

Apache Camel Kafka Connector 使用教程

Apache Camel Kafka Connector 使用教程 1. 项目的目录结构及介绍 Apache Camel Kafka Connector 项目的目录结构如下: camel-kafka-connector/ ├── archetypes/ ├── camel-kafka-connector-bom/ ├── camel-kafka-connector-examples/ ├── ca...

gitblog_00207的博客 370

CAMEL-Task2-Agent的构成组件

在CAMEL框架中,agent使用内置工具或自定义工具完成任务的示例说明。

Mocode的博客 1350

Apache Camel SFTP 参数说明及介绍

不支持绝对路径。骆驼通过修剪所有的前斜线将绝对路径转换为相对路径directoryname。日志中将显示警告消息。 Maven用户将需要为其组件添加以下依赖项pom.xml: <span style="color:#333333"><span style="color:#585ac2"><code class="language-xml">...

qiandeqiande的专栏 3570

Apache Camel 路由

Apache Camel 路由

chenbj123的博客 1680

camel重要网址收集

http://blog.youkuaiyun.com/kkdelta/article/category/1071275

sjmnh1的专栏 634
上一篇: Apache Camel - Transforming Data
下一篇: SpringData的JpaRepository
TuxedoLinux
博客等级 码龄9年 268粉丝 34原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值