【Apache Camel】基础知识
【Apache Camel】基础知识
- Apache Camel是什么
- Apache Camel基本概念和术语
- CamelContext
- Endpoints
- Routes
- RouteBuilder
- Components
- Message
- Exchange
- Processors
- Domain Specific Language(DSL)
- Apache Camel 应用执行步骤
- Apache Camel 示意图
- 参考
Apache Camel是什么
Apache Camel是一个基于 EIP(Enterprise Integration Patterns) 的通用开源集成框架,用于集成各种异构系统,完成异构系统间数据交换和共享。
Apache Camel基本概念和术语
CamelContext
CamelContext 是 Camel 的运行时系统,管理了 Routes、Endpoints、Components、Message 等,工作方式类似 Spring ApplicationContext。通过 CamelContext 可以访问 Components、Endpoints、Routes、Type converters、Data formats、Registry、Languages。

通常应用程序中只有一个 CamelContext,但也可以同时存在多个 CamelContext,但多个 CamelContext 之间彼此需要隔离,如果要在多个 CamelContext 之间通信,则需要加入一个传输层(如消息队列)。
Endpoints
Endpoints 代表了一个可以通过某个地址 URL 进行通信的命名软件实体或资源,可以简单理解为是一个接口。可以从 Endpoints 中检索(Consumer Endpoints)或发送(Producer Endpoints)数据以进行路由及数据操作。

配置 Endpoints 的 URI 格式:
- Schema:表示哪个 Component 组件处理此类 Endpoint,本例中的
file表示使用FileComponent,FileComponent被当做工厂,根据 URI 剩余部分创建FileEndpoint; - Context path:上下文路径,本例中配置
FileComponent的起始文件夹是data/inbox; - Options:选项,本例中配置以5s的时间间隔轮询文件。

Endpoints 充当工厂,用于创建能够接收 Message 的 Consumer,或将 Message 发送到特定 Endpoint 的 Producer。

Routes
Routes 用于连接源 Endpoints 和目标 Endpoints,Routes 描述了消息从源 Endpoints 到目标 Endpoints 的移动过程。
RouteBuilder
封装了 Camel 运行时使用的规则(Rules)、Endpoints 和 Components,每个 CamelContext 可以包含一个或多个 RouteBuilder,RouteBuilder 被扩展并添加到 CamelContext 中以描述路由规则。通常自定义 RouteBuilder 继承自 org.apache.camel.builder.RouteBuilder。
Components
Components 是一个基础构建模块,负责在路由构建过程中创建 Endpoints,Camel 提供了大量内置的 Components,这些 Components 提供了与各种技术和协议的连接。
Message
Message 接口提供了单个消息的抽象表示,如请求消息、回复消息、异常消息。Message 接口 API 提供了 Getter 和 Setter 方法用于访问消息ID、消息体(Body)和消息头(Header)的单个字段。
Exchange
Exchange 接口提供了一次消息交换的抽象表示,一次消息交换是指一个请求消息及其对应的回复或异常消息。Camel 将请求消息、回复消息、异常消息称为 in messages、out messages、fault messages。
Processors
Processors 在消息交换过程中对消息进行处理,可用作消息转换器实现。定义 Routes 时可以添加 Processors 在消息交换过程中执行自定义逻辑。自定义 Processor 需要实现 org.apache.camel.Processor 接口并重写 process() 方法,方法参数为 Exchange 而非 Message。

Domain Specific Language(DSL)
领域特定语言,用于定义 Routes,主要包含三类:
- XML
- YAML
- Java DSL
Apache Camel 应用执行步骤
- 创建 CamelContext 对象;
- 添加 Endpoints 和 Components;
- 在 CamelContext 中添加路由 Routes,连接源 Endpoints 和目标 Endpoints;
- 调用 CamelContext 的
start()方法启动 Camel 内部线程负责发送、接收、处理 Endpoints 中的消息 Message; - 最后,调用 CamelContext 的
stop()方法,优雅地停止所有的 Endpoints 和 Camel 内部线程。
需要注意:
- CamelContext 的
start()方法不会无限期阻塞,在启动了每个 Component 和 Endpoint 的内部线程后就返回了,相反stop()方法会等待每个 Endpoint 和 Component 内部的所有线程都终止后才返回; - 如果忽略调用
start()方法,Camel 将不会处理消息,因为内部线程还未创建; - 如果终止应用前忽略调用
stop()方法,那么可能会以不一致的状态终止,如果在 JUnit 测试中忽略调用 CamelContext 的stop()方法则可能导致失败,因为消息没有机会得到完全处理。
Apache Camel 示意图

参考
- A Camel tutorial for beginners
相关文章:
【Apache Camel】基础知识
【Apache Camel】基础知识 Apache Camel是什么Apache Camel基本概念和术语CamelContextEndpointsRoutesRouteBuilderComponentsMessageExchangeProcessorsDomain Specific Language(DSL) Apache Camel 应用执行步骤Apache Camel 示意图参考 Apache Camel…...
Python之访问集合的迭代器
对迭代器的理解对于我们访问数据量大是有很大的帮助,将介绍它。 一、概念 迭代:是访问集合元素的一种方式,按照某种顺序逐个访问集合中的每一项。 可迭代对象:能够被迭代的对象,称为可迭代对象 判定依据:能…...
【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器
【Spring连载】使用Spring Data访问 MongoDB----对象映射之基于类型的转换器 一、自定义转换二、转换器消歧(Disambiguation)三、基于类型的转换器3.1 写转换3.2 读转换3.3 注册转换器 一、自定义转换 下面的Spring Converter实现示例将String对象转换为自定义Email值对象: R…...
在ubuntu上安装hadoop完分布式
准备工作 Xshell安装包 Xftp7安装包 虚拟机安装包 Ubuntu镜像源文件 Hadoop包 Java包 一、安装虚拟机 创建ubuntu系统 完成之后会弹出一个新的窗口 跑完之后会重启一下 按住首先用ctrlaltf3进入命令界面,输入root,密码登录管理员账号 按Esc 然后输入 …...
Python 语句(二)【循环语句】
循环语句允许执行一个语句或语句组多次,其程序流程图如下: 在python中有三种循环方式: while 循环 当判断条件为 true 时执行循环体,否则退出循环体。for 循环 重复执行语句嵌套循环 (在while循环体中嵌套for循环&…...
(3)(3.3) MAVLink高延迟协议
文章目录 前言 1 配置 2 说明 3 消息说明 前言 ArduPilot 支持 MAVLink 高延迟协议(MAVLink High Latency)。该协议专为卫星或 LoRA 等低带宽或高成本链路而设计。 在此协议中,每 5s 只发送一次 HIGH_LATENCY2 MAVLink 信息。对 MAVLink 命令或请求(…...
【异常处理】Vue报错 Component template should contain exactly one root element.
问题描述 启动VUE项目后控制台报错: Component template should contain exactly one root element. If you are using v-if on multiple elements, use v-else-if to chain them instead.翻译为:组件模板应该只包含一个根元素 查看vue代码࿰…...
Eth-trunk隧道
目录 Eth-trunk (划为二层) 二层trunk 三层交换机 网关冗余 Eth-trunk (划为二层) 一,...
【Ubuntu】将多个python文件打包为.so文件
1.为什么要将python打包为.so文件? 保护源码 2.实战例子 a.安装相应的包 pip install cython 验证安装是否成功 cython --version b.实战的文件目录和内容 hi.py # This is a sample Python script.# Press ShiftF10 to execute it or replace it with your…...
FreeRtos自学笔记3-----参考正点原子视频
FreeRtos任务的创建与删除 任务的创建与删除本质上是调用FreeRtos的API函数。 API函数: 1.xTaskGreate():动态创建任务函数; 2.xTaskGreateStatic();静态创建任务函数; 3.xTaskDelete():任务删除 动态创建任务:任务的任务控制块以…...
使用J-Link Commander通过J-LINK以命令的形式来访问ARM通用MCU
通常我们的操作是写好程序然后将程序下载到芯片里面,然后运行程序来进行相应的操作,其实还可以使用 J − L i n k C o m m a n d e r J-Link\quad Commander J−LinkCommander通过 J − L I N K J-LINK J−LINK以命令的形式来简单访问ARM通用MCU…...
19.删除链表的倒数第N个节点
19.删除链表的倒数第N个节点 力扣题目链接(opens new window) 给你一个链表,删除链表的倒数第 n 个结点,并且返回链表的头结点。 进阶:你能尝试使用一趟扫描实现吗? 示例 1: 输入:head [1,2,3,4,5], n…...
【Linux C | 网络编程】广播概念、UDP实现广播的C语言例子
😁博客主页😁:🚀https://blog.csdn.net/wkd_007🚀 🤑博客内容🤑:🍭嵌入式开发、Linux、C语言、C、数据结构、音视频🍭 🤣本文内容🤣&a…...
java 面向对象 day3
这里写目录标题 1、 内部类1.1 成员内部类 静态内部类1.2 局部内部类1.3 匿名内部类[重点] 2、枚举2.1 使用枚举类 设计单例模式2.2 小实例 3、泛型3.1 认识泛型3.2 泛型类3.3 泛型接口3.4 泛型方法3.5 注意事项 1、 内部类 内部类 就是定义在一个类中的类 1.1 成员内部类 静…...
Flink 大数据 学习详情
参考视频: 尚硅谷大数据Flink1.17实战教程从入门到精通_哔哩哔哩_bilibili 核心目标: 数据流上的有状态的计算 具体说明: Apache Flink是一个 框架 和 分布式处理引擎,用于对 无界(eg:kafka) 和…...
[项目设计] 从零实现的高并发内存池(四)
🌈 博客个人主页:Chris在Coding 🎥 本文所属专栏:[高并发内存池] ❤️ 前置学习专栏:[Linux学习] ⏰ 我们仍在旅途 目录 6.内存回收 6.1 ThreadCache回收内存 6.2 CentralCache回收内存 Rele…...
02.URL的基本知识和使用
一.认识 URL 1. 为什么要认识 URL ? 虽然是后端给我的一个地址,但是哪部分标记的是服务器电脑,哪部分标记的是资源呢?所以为了和服务器有效沟通我们要认识一下 2. 什么是 URL ? 统一资源定位符,简称网址ÿ…...
人工智能指数报告2023
人工智能指数报告2023 主要要点第 1 章 研究与开发第 2 章 技术性能第 3 章 人工智能技术伦理第 4 章 经济第 5 章 教育第 6 章 政策与治理第 7 章 多样性第 8 章 舆论 人工智能指数是斯坦福大学以人为本的人工智能研究所(HAI)的一项独立倡议,…...
Android如何对应用进行系统签名
一、使用命令 获取签名文件 从系统源码环境中获取签名相关文件: platform.x509.pem、platform.pk8 、signapk.jar platform.x509.pem、platform.pk8 位于 ../build/target/product/security 目录下。signapk.jar 位于 ../out/host/linux-x86/framework 目录下。 …...
【系统安全加固】Centos 设置禁用密码并打开密钥登录
文章目录 一,概述二,操作步骤1. 服务器端生成密钥2. 在服务器上安装公钥3.下载私钥到本地(重要,否则后面无法登录)4. 修改配置文件,禁用密码并打开密钥登录5. 重启sshd服务6. 配置xshell使用密钥登录 一&am…...
3步掌握QQ音乐解析:Python工具免费获取全网音乐资源
3步掌握QQ音乐解析:Python工具免费获取全网音乐资源 【免费下载链接】MCQTSS_QQMusic QQ音乐解析 项目地址: https://gitcode.com/gh_mirrors/mc/MCQTSS_QQMusic 你是否曾为音乐平台的各种限制而烦恼?付费会员、下载限制、跨平台不兼容……这些痛…...
Spring Boot 面试题详解:Spring Boot 核心原理、自动配置、启动流程、IoC 容器、Web 请求链路、事务、Actuator 与 JVM 线上排障全攻略
1. Spring Boot 到底是什么?为什么 Java 后端几乎绕不开它?1.1 它不是新语言,也不是替代 Spring,而是 Spring 应用的工程化脚手架Spring Boot 的出现,本质上是为了解决传统 Spring 项目启动慢、配置多、依赖难配、上线…...
Sparrow比特币钱包:终极桌面安全钱包完全指南
Sparrow比特币钱包:终极桌面安全钱包完全指南 【免费下载链接】sparrow Desktop Bitcoin Wallet focused on security and privacy. Free and open source. 项目地址: https://gitcode.com/gh_mirrors/sparr/sparrow Sparrow比特币钱包是一款专注于安全与隐私…...
Mi-Create:零基础也能设计小米手表个性表盘的终极可视化工具
Mi-Create:零基础也能设计小米手表个性表盘的终极可视化工具 【免费下载链接】Mi-Create Unofficial watchface creator for Xiaomi wearables ~2021 and above 项目地址: https://gitcode.com/gh_mirrors/mi/Mi-Create 你是否厌倦了小米手表官方表盘商店的单…...
如何永久保存微信聊天记录:WeChatMsg开源工具的完整解决方案
如何永久保存微信聊天记录:WeChatMsg开源工具的完整解决方案 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we…...
让老游戏在现代Windows上重获新生:DDrawCompat使用完全指南
让老游戏在现代Windows上重获新生:DDrawCompat使用完全指南 【免费下载链接】DDrawCompat DirectDraw and Direct3D 1-7 compatibility, performance and visual enhancements for Windows Vista, 7, 8, 10 and 11 项目地址: https://gitcode.com/gh_mirrors/dd/D…...
3步掌握Windows 11任务栏自定义神器:Taskbar11完全指南
3步掌握Windows 11任务栏自定义神器:Taskbar11完全指南 【免费下载链接】Taskbar11 Change the position and size of the Taskbar in Windows 11 项目地址: https://gitcode.com/gh_mirrors/ta/Taskbar11 还在为Windows 11僵化的任务栏设置而烦恼吗…...
现代工业的命脉——稀土
你可能从未见过稀土,但它们藏在你每天离不开的手机、电脑、汽车甚至节能灯泡里。没有稀土,科技产品的性能会瞬间退回几十年前。有人把它们比作“工业维生素”——用量极少,作用却无可替代。稀土不是土,是一组金属元素先说清楚一个…...
对比直接使用厂商 API 观察 Taotoken 在用量与成本可视化方面的优势
🚀 告别海外账号与网络限制!稳定直连全球优质大模型,限时半价接入中。 👉 点击领取海量免费额度 对比直接使用厂商 API 观察 Taotoken 在用量与成本可视化方面的优势 效果展示类,从个人开发者视角出发,分享…...
告别枯燥协议!用Python脚本+逻辑分析仪实测JESD204B的F和K参数
告别枯燥协议!用Python脚本逻辑分析仪实测JESD204B的F和K参数 在高速串行通信领域,JESD204B协议因其高效率而备受青睐,但抽象的参数定义常常让工程师望而生畏。本文将以一种全新的实践视角,带您通过Python脚本和逻辑分析仪&#x…...
