【Apache Camel】基础知识

news2024/10/7 10:25:55

【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 之间彼此需要隔离,如果要在多个 CamelContext 之间通信,则需要加入一个传输层(如消息队列)。

Endpoints

Endpoints 代表了一个可以通过某个地址 URL 进行通信的命名软件实体或资源,可以简单理解为是一个接口。可以从 Endpoints 中检索(Consumer Endpoints)或发送(Producer Endpoints)数据以进行路由及数据操作。
Endpoints
配置 Endpoints 的 URI 格式:

  • Schema:表示哪个 Component 组件处理此类 Endpoint,本例中的 file 表示使用 FileComponentFileComponent 被当做工厂,根据 URI 剩余部分创建 FileEndpoint
  • Context path:上下文路径,本例中配置 FileComponent 的起始文件夹是 data/inbox
  • Options:选项,本例中配置以5s的时间间隔轮询文件。
    Endpoints URI
    Endpoints 充当工厂,用于创建能够接收 Message 的 Consumer,或将 Message 发送到特定 Endpoint 的 Producer。

Endpoint as a factory

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
Processors

Domain Specific Language(DSL)

领域特定语言,用于定义 Routes,主要包含三类:

  • XML
  • YAML
  • Java DSL

Apache Camel 应用执行步骤

  1. 创建 CamelContext 对象;
  2. 添加 Endpoints 和 Components;
  3. 在 CamelContext 中添加路由 Routes,连接源 Endpoints 和目标 Endpoints;
  4. 调用 CamelContext 的 start() 方法启动 Camel 内部线程负责发送、接收、处理 Endpoints 中的消息 Message;
  5. 最后,调用 CamelContext 的 stop() 方法,优雅地停止所有的 Endpoints 和 Camel 内部线程。

需要注意:

  • CamelContext 的 start() 方法不会无限期阻塞,在启动了每个 Component 和 Endpoint 的内部线程后就返回了,相反 stop() 方法会等待每个 Endpoint 和 Component 内部的所有线程都终止后才返回;
  • 如果忽略调用 start() 方法,Camel 将不会处理消息,因为内部线程还未创建;
  • 如果终止应用前忽略调用 stop() 方法,那么可能会以不一致的状态终止,如果在 JUnit 测试中忽略调用 CamelContext 的 stop() 方法则可能导致失败,因为消息没有机会得到完全处理。

Apache Camel 示意图

Apache Camel Diagram

参考

  • A Camel tutorial for beginners

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1494445.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ArcGIS超级工具】基于ArcPy的矢量数据批量自动化入库工具

最近,有很多做规划的朋友私信我,想让我帮忙开发一款ArcGIS自动化脚本工具,实现点、线、面的自动化入库操作,帮他们在平时的内业数据处理工作中减少机械式重复性的工作,提高工作效率。为此,我详细了解了下目…

第一套试卷

1.队列的链式操作 循环链表实现的链式队列中,头指针的变动主要取决于队列的操作。一般来说,在循环链表队列中,头指针front指向队列的头节点,尾指针rear指向队列的尾节点的下一个位置。 当进行入队(插入)操…

基于词袋模型的场景识别(附源代码!!!)

目录 1. 任务要求2. 数据集3. 实现算法4. 实验结果5. 源代码 1. 任务要求 输入:给定测试集图片,预测在15个场景中的类别。任务: 实现Tiny images representation。实现最近邻分类器nearest neighbor classifier。实现SIFT特征词袋表示 输出&…

diffusion model (扩散模型)原理

扩散模型分为正向过程和反向过程。 正向过程为一点点在图片上添加噪声的过程,反向过程为去噪声的过程。 图片的生成就是反向过程,给一张高斯噪声图片,逐步去噪生成图片。 扩散模型和VAE的区别, VAE是一步到位的(通过…

中文版国产Figma简单好上手

在过去的两年里,国内外协同办公室发展迅速。一方面,它是由突如其来的疫情推动的,另一方面,它是科学技术不断进步的必然结果。在市场的推动下,市场上出现了越来越多的协同办公软件,使工作场所的工作更加高效…

Java开发避坑指南,手把手教你写Java项目文档

前言 作为一个有丰富经验的微服务系统架构师,经常有人问我,“应该选择RabbitMQ还是Kafka?” 基于某些原因, 许多开发者会把这两种技术当做等价的来看待。的确,在一些案例场景下选择RabbitMQ还是Kafka没什么差别&…

2.Rust变量

变量的声明 let关键字 在Rust中变量必须要先声明才能使用,let关键字用于声明变量并将一个值绑定到该变量上。如下: fn main() {let var_name:i32 123123;println!("{}",var_name) //println! 是一个宏(macros),可以…

遇见未来的你——陪伴是最长情的告白

目录 一、背景介绍二、思路&方案三、过程1.家庭中彼此的陪伴最长情2.事业中与合伙人与同事与朋友与产品的陪伴最长情3.人生中与计划与落实与啊哈的陪伴最长情4.肉体与灵魂分分合合的体验 四、总结 一、背景介绍 人有时候一转身就是一辈子,所以珍惜转身的每一个…

如何计算搭建光伏电站需要多少成本?

光伏电站,又称太阳能电站,是一种利用太阳能发电的电力系统。随着全球对可再生能源的需求日益增加,光伏电站的建设变得越来越普遍。然而,在投资光伏电站之前,了解其建设成本是非常重要的。本文将介绍如何计算搭建光伏电…

96、C++ 性能优化一览

在对 C++ 版本的 resnet50 经过大约 5 个版本的优化之后,性能也基本达到了预期。至少利用手写的 resnet50 在 CPU 上推理一张图片感觉不到卡顿了。 下面对这几个版本的性能优化做一个总结。 初始版本1 第一版本的 C++ 代码,并没有考虑性能问题,仅仅是想按照手写 resnet50 …

【学习】torch.nn.CrossEntropyLoss交叉熵损失函数

交叉熵损失函数torch.nn.CrossEntropyLoss 交叉熵主要是用来判定实际的输出与期望的输出的接近程度,为什么这么说呢,举个例子: 在做分类的训练的时候,如果一个样本属于第K类,那么这个类别所对应的输出节点的输出值应…

腾讯云服务器99元一年是真的吗?只要61元!

腾讯云服务器99元一年是真的吗?假的,不要99,只要61元!又降价了!腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16…

腾讯云服务器99元一年是真的吗?又降价,现在只要61元

腾讯云服务器99元一年是真的吗?又降价,现在只要61元。腾讯云服务器多少钱一年?61元一年起,2核2G3M配置,腾讯云2核4G5M轻量应用服务器165元一年、756元3年,4核16G12M服务器32元1个月、312元一年,…

【好书推荐-第九期】Sora核心技术相关书籍《扩散模型:从原理到实战》与《GPT 图解:大模型是怎样构建的》:Sora的两大核心技术,都藏在这两本书里!

😎 作者介绍:我是程序员洲洲,一个热爱写作的非著名程序员。CSDN全栈优质领域创作者、华为云博客社区云享专家、阿里云博客社区专家博主、前后端开发、人工智能研究生。公众号:洲与AI。 🎈 本文专栏:本文收录…

底层day1作业

思维导图: 一.总结keil5下载代码和编译代码需要注意的事项 当使用Keil5下载代码和编译代码时,有一些需要注意的事项。以下是总结: 1. 确保正确配置目标 2. 配置编译器选项。 3. 确保正确配置连接器脚本 4. 检查编译错误和警告。 5. …

生成式模型实战—小小案例(python)

实战之前,环境需要已经搭建好。如果环境没有搭建好,可以参考PyTorch2.0 环境搭建详细步骤(Nvidia显卡)-CSDN博客 接下来,我们今天的学习之旅~ Step1. 安装类库 transformers pip install transformers Step2. 代码敬上 from transformer…

使用VS Code运行Java SpringBoot项目

本文并不详细讲 Java 项目启动前需要哪些配置,本文主要受众是平时用惯了 Idea 的 Java 程序员,仅讲解如何用 VS Code 启动服务 前提条件 Jdk、Maven、Nacos、Seata、TDengine等该配置的配置,该启动的启动,就你平时用 Idea 启动项…

力扣hot---岛屿数量

思路dfs: 首先通过两层for循环遍历每一个点,如果这个点为0或者2(这个2是什么呢?是在遍历该点以及该点连成的这一片区域中,因为通过深度优先搜索,遍历该点就等于遍历这一片区域,遍历这篇区域中的…

Qt 类的前置声明和头文件包含

1. 在头文件中引入另一个类经常有两种写法 1&#xff09;前置声明 2&#xff09;头文件包含 #ifndef FRMCOUPLE2_H #define FRMCOUPLE2_H#include <QWidget> //头文件包含namespace Ui { class frmcouple2; }//前置声明&#xff1a;QPushButton frmchkeyboard…

java网络编程 01 IP,端口,域名,TCP/UDP, InetAddress

01.IP 要想让网络中的计算机能够互相通信&#xff0c;必须为计算机指定一个标识号&#xff0c;通过这个标识号来指定要接受数据的计算机和识别发送的计算机&#xff0c;而IP地址就是这个标识号&#xff0c;也就是设备的标识。 ip地址组成&#xff1a; ip地址分类&#xff1a;…