Apache Camel简介

Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎,可以帮助开发人员以各种领域特定语言(DSL)(例如Java,Spring / XML,scala等)创建路由和中介规则。

骆驼用途广泛

Camel使用URI来支持大量的传输和消息传递模型,例如HTTP,JMS,JBI,Mina,SCA,CXF,它还与外部组件和数据格式很好地兼容。 要了解Camel的多功能性,您可以在下面的链接中浏览其支持的组件和URI列表。 http://camel.apache.org/components.html

骆驼易于使用

骆驼允许我们使用同一组API来创建路由并在各个组件之间传递消息。 这使得它非常容易使用

单元测试骆驼轻而易举

单元测试对于编写任何质量代码至关重要。 骆驼使软件开发的基础变得非常容易。 它提供了许多现成的组件,例如CamelContextSupport,camel-guice,camel-test-blueprint,可轻松测试代码。 在以后的文章中会更多。

骆驼的术语/类/接口

端点是交换消息的地方。 它可以引用地址,POJO,电子邮件地址,Web服务uri,队列uri,文件等。在骆驼中,端点是由实现的端点接口实现的。 端点被称为路由的东西包装。

CamelContext是所有骆驼应用程序的核心,它代表Camel运行时系统。

  1. 创建camelcontext。
  2. 添加端点或组件。
  3. 添加路由以连接端点。
  4. 调用camelcontext.start()–这将启动所有负责在端点中接收,发送和处理消息的骆驼内部线程。
  5. 最后,在交换和处理所有消息时调用camelcontext.stop()。 这将优雅地停止所有骆驼内部线程和端点。

这是围绕CamelContext对象的薄包装,它负责将交换或消息发送到端点。

组件实际上是一个端点工厂。 由于骆驼支持许多不同种类的资源,因此这些资源中的每一个都有不同种类的端点。 在实际情况下,应用程序不要直接使用组件创建端点。 相反,CamelContext决定实例化哪个组件,然后使用该组件实例创建端点。 因此,在应用程序中我们将拥有。 CamelContext.getEndpoint(“ pop3://john.smith@mailserv.example.com?password = myPassword”); 现在,在这种情况下,pop3是组件的名称。 CamelContext将所有组件名称与组件类映射,并使用其实例化实例的名称。 一旦拥有了组件的句柄,它就会通过调用实例化端点。 Component.createInstance()方法。

消息表示单个具体消息,即请求,回复或异常。 所有具体的消息类都会影响消息接口,例如JmsMessage类。

交换是消息的容器。 当消费者在路由过程中收到消息时创建。

处理器接口表示处理消息的类。 它包含单个方法public void process(Exchange交换)引发异常。应用程序开发人员可以实现此接口,以在消费者收到消息时对消息执行业务逻辑。

路由是通过过滤器或路由器通过任意类型的决策,将消息从源一步一步地移动到目的地。 它们是借助DSL(特定于域的语言)进行配置的。 Java DSL是通过实现routebuilder接口创建的。 它具有一个称为configure()的方法,该方法定义了消息的整个路由。 也可以使用spring通过xml文件配置路由。

骆驼代码的一个小例子。

让我们以一个小例子来说明一下Camel可以做什么。 在此示例中,我们将文件夹中存在的文件组移动到另一个文件夹。 在此过程中,我们将执行以下操作

  1. 签出Camel的依赖项。
  2. 创建一个简单的RouterBuilder。
  3. 在spring文件中注册CamelContext。
  4. 在CamelContext Bean中注入routerbuilder
  5. 通过启动Camelcontext来执行该类,并在执行完成后最终将其停止。

1.依赖关系 –在pom.xml中添加以下依赖关系

<dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-core</artifactId>
            <version>${camel-version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-spring</artifactId>
            <version>${camel-version}</version>
        </dependency>

        <dependency>
            <groupId>org.apache.camel</groupId>
            <artifactId>camel-aws</artifactId>
            <version>${camel-version}</version>
        </dependency>

2.创建RouterBuilder –可以通过扩展org.apache.camel.builder.RouterBuilder类并覆盖configure()方法来创建RouterBuilder。 这是一个例子

import org.apache.camel.builder.RouteBuilder;

/**
 * Created by IntelliJ IDEA.
 * User: Niraj Singh
 * Date: 7/28/13
 * Time: 10:29 AM
 * To change this template use File | Settings | File Templates.
 */
public class MyFirstRouterBuilder extends RouteBuilder {
     @Override
    public void configure() throws Exception {
        try{
            from( "file:d:/vids").to("file:d:/temp");
        }catch(Exception e){

        }
     }
}
  1. From()是源端点,包含骆驼将要轮询的文件或目录的uri。
  2. to()代表目标端点,并包含目标文件或目录的名称。
  3. 文件组件uri的格式为“ file:// nameOfFileOrDirectory ”。

3.在Spring注册CamelContext并在Spring注入RouterBuilder。

<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="
          http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
          http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd">

    <camelContext id="sqsContext" xmlns="http://camel.apache.org/schema/spring">
         <routeBuilder ref="myFirstRouter" />
    </camelContext>

    <bean id="myFirstRouter" class="com.aranin.aws.sqs.MyFirstRouterBuilder"/>

</beans>

4.启动骆驼上下文并执行代码,然后停止骆驼上下文。

import org.apache.camel.CamelContext;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.FileSystemXmlApplicationContext;

/**
 * Created by IntelliJ IDEA.
 * User: Niraj Singh
 * Date: 4/16/13
 * Time: 11:21 AM
 * To change this template use File | Settings | File Templates.
 */
public class CamelHello {
    public static void main(String args[]) throws Exception {
        try {
                ApplicationContext springcontext = new FileSystemXmlApplicationContext("D:/samayik/awsdemo/src/main/resources/hellocamel.xml");
                CamelContext context = springcontext.getBean("firstCamelContext", CamelContext.class);
                context.start();
                Thread.sleep(10000);
                context.stop();

            } catch ( Exception e ) {
                System.out.println(e);
            }

    }
}

如果运行此类,则首先我们从spring config文件中加载camelcontext。 在其中注入路由器生成器。 上下文启动后,然后将源目录中的所有文件复制到目标目录。 复制完所有文件后,尝试将新文件复制到源目录,在这种情况下,上下文运行10000 ms之前,该文件也将复制到目标文件。

我没有更多关于骆驼的高级教程。 也许您会发现它们很有用。 参考部分列出了这些链接。

参考文献

  1. http://camel.apache.org/
  2. http://camel.apache.org/enterprise-integration-patterns.html
  3. http://architects.dzone.com/articles/enterprise-integration
  4. http://weblog4j.com/2013/05/14/amazon-sqs-listening-to-sqs-using-apache-camel-the-spring-dsl-way/
  5. http://weblog4j.com/2013/04/17/amazon-sqs-listening-to-amazon-sqs-queue-using-apache-came l /

就这些了。 尽管没有人会发表评论,但是我还是要坚持不懈,如果您喜欢本教程,仍然请大家排一两行。

温暖的问候

尼拉吉

参考: Weblog4j博客上的JCG合作伙伴 Niraj Singh 对Apache Camel的介绍 。

翻译自: https://www.javacodegeeks.com/2013/08/introduction-to-apache-camel.html

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

相关推荐

Apache Camel是一个开源的集成框架,它提供了一种基于消息传递的方式来实现企业应用之间的集成

在Camel中定义消息路由规则。可以使用Java DSL或Spring XML来配置路由。例如,上面的代码片段创建了一个定时任务,每隔一秒向名为。

[Blog][Domain] programb.blog.youkuaiyun.com 1064

Apache Camel 了解一下?

何为ApacheCamel?从本质上来说,ApacheCamel是Java的三方集成库。从使用者角度来说,它是一种语言,一组JavaAPI和一大堆组件,以便在不同计算机系统之间集成和处理数据。从我的角度来看,ApacheCamel就像胶水,作为Java的粘合剂,将不同的程序服务连接在一起。官方文档指出,Camel可以处理几乎所有的事情,包括从Http通信、磁盘读取、与Twitter、Facebook等应用程序交流、与AWS、Azure等云服务提供商通信、与消息中间件交互等等,应有尽有。...

m0_72885838的博客 2079

Apache Camel 学习 简介01

Apache Camel: 概念:是一个基于 规则路由 和 processor处理 的引擎。 官网介绍:Camel允许您创建企业集成模式,以基于Java的域特定语言(或Fluent API),基于Spring或Blueprint的Xml配置文件或通过Scala DSL实现路由和中介规则。 这意味着无论是在Java,Scala还是XML编辑器中,您都可以在ID...

郭传志的博客 706

apache camel_Apache Camel简介

apache camel Apache Camel是著名的企业集成模式的开源实现。 Camel是一个路由和中介引擎,可帮助开发人员以各种领域特定语言(DSL)(例如Java,Spring / XML,scala等)创建路由和中介规则。 骆驼用途广泛 Camel使用URI来支持大量的传输和消息传递模型,例如HTTP,JMS,JBI,Mina,SCA,CXF,它还可以与外部组件和数据格式很好地兼容。...

cunhui1209的博客 839

产品经理必看!用Cursor自动生成符合开发规范的技术文档(含UI设计规则模板)

本文详细介绍了产品经理如何利用Cursor工具自动生成符合开发规范的技术文档,并整合UI设计规则模板。通过配置标准化文档结构和设计关联规则,Cursor能有效解决术语不统一、结构混乱等问题,提升跨团队协作效率。文章包含实际案例、规则配置要点及企业级实施方案,帮助产品经理快速掌握AI辅助文档生成技巧。

emacs5lisp的博客 224

C51:PWM+舵机角度控制

PWM,英文名Pulse Width Modulation,是脉冲宽度调制缩写,它是通过对一系列脉冲的宽度进行调制,等效出所需要的波形(包含形状以及幅值),对模拟信号电平进行数字编码,也就是说通过调节占空比的变化来调节信号、能量等的变化,占空比就是指在一个周期内,信号处于高电平的时间占据整个信号周期的百分比,例如方波的占空比就是50%.脉冲宽度调制通过占空比编码模拟信号一个周期内,高电平占据时长的百分比如下图所示,最便宜的舵机sg90,常用三根或者四根接线,黄色为PWM信号控制。

qq_73379310的博客 3389

Apache Camel#1-Apache Camel简介

你好,世界! 这是我的第一篇文章,所以我决定写一&#199...

专业的开发者“讨论” 340

从mseed到SAC格式转换全攻略:mseed2sac工具安装与批量处理技巧

本文详细介绍了如何将mseed格式的地震数据高效转换为SAC格式,涵盖mseed2sac工具的安装、单文件转换技巧、批量处理自动化实现以及元数据高级处理策略。通过具体命令和脚本示例,帮助地震学研究者快速掌握数据预处理的关键技术,提升波形数据分析效率。

ruby5的博客 927

Apache Camel 简介

Apache Camel 异常处理与表达式使用摘要 本文汇总了Apache Camel框架中关于null安全操作、变量设置和时间处理的核心知识点: null安全处理 使用?.操作符安全访问嵌套属性 ??操作符提供默认值 支持isEmpty/exists检查和条件表达式处理 变量作用域 setVariable:路由内部临时变量 setProperty:Exchange生命周期内共享 setHeader:消息级别,随消息传递 时间处理 ${date:now}获取当前时间 支持格式化输出和时间偏移操作 异常处理

muguazhi的博客 905

告别Root!用Python脚本一键解密Android微信EnMicroMsg.db数据库(附完整源码)

本文详细介绍了如何在非Root环境下使用Python脚本一键解密Android微信EnMicroMsg.db数据库。通过ADB调试接口和SQLCipher技术,实现自动化提取和解密微信聊天记录数据库,无需Root权限,适合数据分析师和普通用户安全备份数据。

weixin_29266007的博客 331

YOLO系列算法改进 | C3k2改进篇 | 融合DFRL双融合注意力接收层 | 轻量化与全局感受野双突破,适应高分辨率航拍与密集小目标检测场景 | CVPR 2026

YOLO系列算法改进 | C3k2改进篇 | 融合DFRL双融合注意力接收层 | 轻量化与全局感受野双突破,适应高分辨率航拍与密集小目标检测场景 | CVPR 2026 (以YOLO26最新目标检测模型为基础,利用C3k2_DFRL创新模块进行改进)

2502_91881744的博客 233

Apache Camel 路由简介

在 Apache Camel 中,路由更像是一个一般概念,因为它定义为消息从源到目标的逐步移动。消息的使用者可以从外部服务获取消息,在系统上轮询消息,甚至自己编写消息。消息通过一个可以是 EIP 的处理节点,然后是一个处理消息的处理器,然后是一个拦截器(路由消息的条件),最后消息被传递到端点。然后,我们可以选择是向该 URI 指定的组件发送消息还是使用来自该组件的消息。在 Apache Camel 的案例中,在 EMS(企业消息系统)中完成的路由是根据定义的条件将消息从输入队列带到不同输出队列的过程。

java1527的博客 920

读懂ARM汇编程序,你只差这篇!保姆级教程(附完整示例剖析)!

ARM汇编中的符号、标号、伪操作有哪些?C语言和汇编语言如何混合编程?GNU ARM汇编和ARM汇编的区别有哪些?

车载系统攻城狮 1万+

Apache Camel简介以及使用场景

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

GuoDa_的博客 1万+

把 LDB 讲透:SAP ABAP 逻辑数据库的结构、事件模型、动态选择与现代替代方案

摘要:SAP中的Logical Database(LDB)是一种将表组织成树形结构并统一生成选择屏幕的技术,通过事件驱动方式向报表程序传递数据。虽然被标记为过时,但在理解标准代码和优化性能方面仍有价值。LDB通过SE36事务码创建,其结构包含层级关系、选择屏幕和数据库程序。报表通过NODES声明和GET事件处理数据,支持动态选择以减少数据库访问。在S/4HANA和ABAP Cloud环境下,建议使用CDS View和ABAP SQL等现代方案替代LDB,以提升可测试性和架构清晰度。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 216

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上)

【Verilog基础】CDC跨时钟域方法,典型异步电路设计之脉冲同步器(上):慢时钟域到快时钟域!

悟已往之不谏 知来者之可追 1545

Apache Camel 学习 简介02

Apache Camel是Apache基金会下的一个开源项目,它是一个基于规则路由和处理的引擎,提供企业集成模式的Java对象的实现,通过应用程序接口 或称为陈述式的Java领域特定语言(DSL)来配置路由和处理的规则。其核心的思想就是从一个from源头得到数据,通过processor处理,再发到一个to目的的. 这个from和to可以是我们在项目集成中经常碰到的类型:一个FTP文件夹中的文件,一...

郭传志的博客 585

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Apache Camel简介与入门

Apache Camel简介与入门 Apache Camel 是一个基于知名的企业应用模式(Enterprise Integration Patterns)多功能的整合框架. StackOverflow上有很多学习Apache Camel的资源,而这里仅仅是使用一个实例来简单的介绍一下Apache Camel 基础 Apache Camel十一个Java库和引擎,有多种不同的整合模式,然而他...

TuxedoLinux的博客 4915

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

apache camel 相关配置_Apache Camel简介与入门-java

编辑推荐:本文来自于csdn,文章使用一个实例来简单的介绍一下Apache Camel,详细请看下文。StackOverflow上有很多学习Apache Camel的资源,而这里仅仅是使用一个实例来简单的介绍一下ApacheCamel基础Apache Camel十一个Java库和引擎,有多种不同的整合模式,然而他并不是BPMN或者ESB,虽然可以在此引擎下实现他们。ApacheCamel是一个编程...

weixin_39559486的博客 808

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

使用Groovy的Apache Camel简介

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

819
上一篇: Spring面试问题
下一篇: Java开发人员的Erlang
dnc8371
博客等级 码龄12年 422粉丝 0原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值