当前位置: 首页 > news >正文

Apache Camel笔记

Apache Camel笔记

  1. Apache Camel概念
Apache Camel是一个轻量级的应用集成开发框架,专注于简化集成应用的开发。它基于Enterprise Integration Patterns(企业集成模式,简称EIP)的设计理念,提供了灵活的路由和中介机制,用于解决不同应用系统之间的消息传输问题。

Apache Camel的主要特点如下: 使用基于SEDA处理模型的高度可伸缩的企业服务器。 支持REST API。 强大的基于EIP模式的事件路由机制。 动态、声明性的、基于内容和基于规则的路由选项。 易扩展。 可以结合Spring boot使用。

Apache Camel提供多种领域语言来定义路由规则,包括基于Java的Fluent API、Spring或者Blueprint XML配置文件、Scala DSL等。用户可以通过IDE或者Java、Scala或者XML编辑器获得智能化路由规则补全功能。 Apache Camel的使用场景包括: 消息汇聚:例如,有来自不同服务器的消息,有ActiveMQ、RabbitMQ、WebService等,想把它们都存储到日志文件中,可以通过Apache Camel定义路由规则实现。 接口对接:例如,接口报文转换,比如json格式/内容;协议转换,比如不同协议的接口适配;数据对接,比如ETL数据清洗等。在应用架构中通常用于和外部系统进行集成对接。特别适合在大的金融行业、电信行业等系统特别复杂的场景下做系统对接集成工作。对于小型的应用集成项目很难体现出Apache Camel的应用优势,可以根据自身的业务应用需求来灵活选择。
  2. endpoints 端点定义

从哪个端点来, 到哪个端点去
支持http、file、kafka、mq 等消息端点类型:
(1)file:directoryName 官方手册链接
(2)http:hostname[:port][/resourceUri][?options] , 例如:http://127.0.0.1:8080/order?orderId=123 官方手册链接
(3)sftp:host:port/directoryName 官方手册链接
(4)kafka:topic[?options] 例如:kafka:my_topic?headerFilterStrategy=#myStrategy 官方手册链接

// java dsl 方式定义
RouteBuilder builder = new RouteBuilder() {public void configure() {String endpoint1 = "sftp:localhost:8081/folder/test.json"; //  端点1:请求到sftp服务器, 获取文件test.jsonString endpoint2 = "activemq:queue:cheese"; //  端点2:将文件发送到activemq的指定队列from(endpoint1)   .to(endpoint2);         }
};
xml dsl 方式定义
<route><from uri="sftp:localhost:8081/folder/test.json"/>  <!-- 端点1: 请求到sftp服务器, 获取文件test.json --><to uri="activemq:queue:cheese"/>  <!-- 端点2: 将文件发送到activemq的指定队列 -->
</route>
  3.Exchange Pooling

每个route的临时上下文对象, 仅在此route使用, 如果要使用全局变量,可以使用CamelContext
exchange-pooling官网链接

  4. CamelContext

全局上下文对象
camelcontext官网链接

  2. Routes 路由定义

Routes官网链接

// java dsl 方式定义
RouteBuilder builder = new RouteBuilder() {public void configure() {from("direct:a")  	 // 从route.id = a来.to("direct:b"); // 到route.id = b去}
};RouteBuilder builder = new RouteBuilder() {public void configure() {from("sftp:localhost/folder/test.json") //  请求到sftp服务器, 获取文件test.json.to("activemq:queue:cheese");         //  将文件发送到activemq的指定队列}
};
<!-- xml dsl 方式定义 --><route><from uri="direct:a"/>  <!-- 从route.id = a来 --><to uri="direct:b"/>  <!-- 到route.id = b去 -->
</route><route><from uri="sftp:localhost/folder/test.json"/>  <!-- 请求到sftp服务器, 获取文件test.json --><to uri="activemq:queue:cheese"/>  <!-- 将文件发送到activemq的指定队列 -->
</route>
# yaml dsl 方式定义
- route:precondition: "'{{format}}' == 'xml'"  # 前置条件, 当format == 'xml',才执行routefrom:uri: "direct:a"steps:- to: "direct:b"
  5. step 官方手册链接

在这里插入图片描述

  4. Apache Yaml DSL 语言扩展包, 支持导入yaml定义Route

定义yaml可使用的格式:camel-yaml-dsl/src/generated/resources/schema/camelYamlDsl.json
下面的例子使用到如下类 :
(1)- route org.apache.camel.model.RouteDefinition
(2)steps org.apache.camel.model.ProcessorDefinition
(3)- to org.apache.camel.model.ToDefinition
(4) - from org.apache.camel.model.FromDefinition
(5)- log org.apache.camel.model.LogDefinition

例子:

# 定时器  起始路由流程
- route:id: "START_TIMER"group: "test_group"from: zookeeper-master:SPLITPACKAGE_TIMER:quartz://SPLITPACKAGE_TIMER?cron=0+0/10+*+*+*+?steps:# 记录日志- log:message: "定时器开始: ${date:now:yyyy-MM-dd HH:mm:ss}"# 路由指向 route = INIT_BEAN- to: direct:INIT_BEAN # bean初始化填充数值
- route:id: "INIT_BEAN"group: "test_group"from: direct:SPLITPACKAGE_1steps:# 往exchange中设置上下文变量值, key = code, value = SPLIT_PACKAGE- setProperty:name: "code"constant: "SPLIT_PACKAGE"- setProperty:name: "bodyName"constant: "mainBody"# 执行1: 调用指定springbean"CommonBean"的方法setGlobalProperty()- to: bean:commonBean?method=setGlobalProperty# 执行2: 路由到下一个步骤- to: direct:SEND_SFTP_REQUEST - route:id: "SEND_SFTP_REQUEST"group: "test_group"from: direct:INIT_BEANsteps:# 发送sftp请求, 上传文件- to: sftp://fjfclass@localhost:8022/sftp/upload?password=RAW(Class@2013_9)&binary=true&fileName=${header.fileName}- to: direct: END_ROUTE- route:id: "END_ROUTE"group: "test_group"from: direct:SEND_SFTP_REQUESTsteps:- to: bean:logUtils?method=generateLog

相关文章:

Apache Camel笔记

Apache Camel笔记 1. Apache Camel概念 Apache Camel是一个轻量级的应用集成开发框架&#xff0c;专注于简化集成应用的开发。它基于Enterprise Integration Patterns&#xff08;企业集成模式&#xff0c;简称EIP&#xff09;的设计理念&#xff0c;提供了灵活的路由和中介机制…...

CSDN定制的奖品谁不想要?

各位大佬&#xff0c;在下真的缺一个喝水的杯子&#xff01;&#xff01;&#xff01; 2023年即将画上句号&#xff0c;在这一年的技术征途上&#xff0c;CSDN始终陪伴在我身边&#xff0c;为我提供了丰富的知识资源、实用的技术文章和友好的交流平台。当我得知自己有幸获得CS…...

橄榄油行业分析:预计2029年将达到298亿美元

橄榄油是全世界公认高端食用油。橄榄油要以油橄榄树的果实为主要原料制得的植物油脂。橄榄油是世界上四大食用草本植物植物油脂之一&#xff0c;每年产量在260&#xff5e;300万吨级之间&#xff0c;占全球橄榄油生产量18900万吨级的1.5%上下。以其带有不饱和脂肪、角鲨烯、花青…...

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性

Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性 将skip属性注释掉或者改为false 如果为true&#xff0c;则工程找不到主启动类...

2. Mybatis 中SQL 执行原理

这里有两种方式&#xff0c;一种为常用的 Spring 依赖注入 Mapper 的方式。另一种为直接使用 SqlSessionTemplate 执行 Sql 的方式。 Spring 依赖注入 Mapper 的方式 Mapper 接口注入 SpringIOC 容器 Spring 容器在扫描 BeanDefinition 阶段会扫描 Mapper 接口类&#xff0c…...

平衡合规与发展天平, 激发数据要素价值

数字经济大潮汹涌&#xff0c;为了应对复杂的外部环境&#xff0c;培育企业内生竞争力&#xff0c;企业需要摆脱贪大求快的增长模式&#xff0c;转向依靠合规与发展的双轮驱动。 数字经济的核心在于数据。重视数据作为生产要素的战略意义&#xff0c;积极建设数据要素流通交易…...

JAVA毕业设计118—基于Java+Springboot的宠物寄养管理系统(源代码+数据库)

毕设所有选题&#xff1a; https://blog.csdn.net/2303_76227485/article/details/131104075 基于JavaSpringboot的宠物寄养管理系统(源代码数据库)118 一、系统介绍 本系统分为管理员、用户两种角色 1、用户&#xff1a; 登陆、注册、密码修改、宠物寄养、寄养订单、宠物…...

oracle 19c容器数据库数据加载和传输-----SQL*Loader(一)

目录 数据加载 &#xff08;一&#xff09;控制文件加载 1.创建用户执行sqlldr 2.创建文本文件和控制文件 3.查看表数据 4.查看log文件 &#xff08;二&#xff09;快捷方式加载 1.system用户执行 2.查看表数据 3.查看log文件 外部表 数据加载和传输的工具&#xff1…...

超维空间M1无人机使用说明书——52、ROS无人机二维码识别与降落

引言&#xff1a;使用二维码引导无人机实现精准降落&#xff0c;首先需要实现对二维码的识别和定位&#xff0c;可以参考博客的二维码识别和定位内容。本小节主要是通过获取拿到的二维码位置&#xff0c;控制无人机全向的移动和降落&#xff0c;分为两种&#xff0c;一种是无人…...

Mac 安装Nginx教程

Nginx官网 Nginx官网英文 1.在终端输入brew search nginx 命令检查nginx是否安装了 2. 安装命令&#xff1a;brew install nginx 3. 查看Nginx信息命令brew info nginx 4. 启动 nginx方式&#xff1a;在终端里输入 nginx 5.查看 nginx 是否启动成功 在浏览器中访问http://l…...

【促销定价】背后的算法技术 1 - 业务问题拆解

【促销定价】背后的算法技术 1 - 业务问题拆解 01 业务背景02 关键挑战03 问题拆解04 核心结论参考文献 本文为转载&#xff0c;大佬的文章写的真好&#xff0c;给大佬推广推广&#xff0c;欢迎大家关注。 如侵删。 导读&#xff1a;在日常生活中&#xff0c;我们经常会遇见线上…...

CNAS中兴新支点——什么是安全测试,安全测试报告有什么作用,主要测试哪些内容?

1.安全测试在做什么&#xff1f; 扫描&#xff1f;在很多人眼中&#xff0c;做安全的就是整天那个工具在哪里扫描操作&#xff0c;使用各种不同的工具做扫描。 是的&#xff0c;扫描是安全测试很重要的一部分&#xff0c;扫描可快速有效发现问题。扫描工具的易用性&#xff0…...

【shell发送邮件】

一、centos系统 mail sendmail发送 安装mail [rootlocalhost ~]# yum install -y mailx安装sendmail [rootlocalhost ~]# yum install -y sendmail配置mail.rc文件 # 发送人&#xff0c;必须和发件人保持一致 set from769593qq.com # 邮箱服务器 set smtpsmtp.qq.com # 邮箱…...

Qt实现简单的分割窗口

最近在学习一些关于Qt的新知识&#xff0c;今天来讲述下我学习到的窗口分割&#xff0c;如果有不正确的&#xff0c;大家可以指正哦~ 首先&#xff0c;先看一下实现之后的简单效果吧&#xff01;省的说的天花乱坠&#xff0c;大家却不知道说的是哪个部分。 功能实现 整体demo…...

简单易懂的PyTorch激活函数大全详解

目录 torch.nn子模块Non-linear Activations nn.ELU 主要特点与注意事项 使用方法与技巧 示例代码 图示 nn.Hardshrink Hardshrink函数定义 参数 形状 示例代码 图示 nn.Hardsigmoid Hardsigmoid函数定义 参数 形状 示例代码 图示 nn.Hardtanh HardTanh函数…...

x-cmd pkg | pdfcpu - 强大的 PDF 处理工具

目录 简介首次用户多功能支持性能表现安全的加密处理进一步阅读 简介 pdfcpu 是一个用 Go 编写的 PDF 处理库。同时它也提供 API 和 CLI。pdfcpu 提供了丰富的 PDF 操作功能&#xff0c;用户还能自己编写配置文件&#xff0c;用来管理和使用各种自定义字体并存储有效的默认配置…...

linux 压力测试 AB ApacheBench

ab的简介 ab是apachebench命令的缩写。 ab是apache自带的压力测试工具。ab非常实用&#xff0c;它不仅可以对apache服务器进行网站访问压力测试&#xff0c;也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等 ab的原理 ab的原理&#xff1a;ab命令会创建多…...

【云计算】云存储是什么意思?与本地存储有什么区别?

云计算环境下&#xff0c;衍生了云存储、云安全、云资源、云管理、云支出等等概念。今天我们就来了解下什么是云存储&#xff1f;云存储与本地存储有什么区别&#xff1f; 云存储是什么意思&#xff1f; 云存储是一种新型的数据管理方式&#xff0c;它通过网络将大量不同类型、…...

月入7K,19岁少年转行网优,他凭什么打破低学历魔咒?

专科未毕业、19岁&#xff0c;毫无专业技能&#xff0c;被匆匆赶进就业市场你会遇到什么&#xff1f; 毫无疑问&#xff0c;铺天盖地的拒绝和不合适&#xff0c;甚至有些公司连投递的资格都没有&#xff0c;这可能是所有低学历者求职过程中会遇到的“魔咒”。低学历似乎与低薪资…...

【C/C++】轻量级跨平台 开源串口库 CSerialPort

文章目录 1、简介2、支持的平台3、已经支持的功能4、Linux下使用5、使用vcpkg安装CSerialPort6、交叉编译7、效果图8、基于CSerialPort的应用8.1、CommMaster通信大师8.2、CommLite串口调试器 1、简介 Qt 的QSerialPort 已经是跨平台的解决方案&#xff0c;但Qt开发后端需要 Q…...

大创项目推荐 深度学习图像修复算法 - opencv python 机器视觉

文章目录 0 前言2 什么是图像内容填充修复3 原理分析3.1 第一步&#xff1a;将图像理解为一个概率分布的样本3.2 补全图像 3.3 快速生成假图像3.4 生成对抗网络(Generative Adversarial Net, GAN) 的架构3.5 使用G(z)生成伪图像 4 在Tensorflow上构建DCGANs最后 0 前言 &#…...

嵌入式系统复习--基于ARM的嵌入式程序设计

文章目录 上一篇编译环境ADS编译环境下的伪操作GNU编译环境下的伪操作ARM汇编语言的伪指令 汇编语言程序设计相关运算操作符汇编语言格式汇编语言程序重点C语言的一些技巧 下一篇 上一篇 嵌入式系统复习–Thumb指令集 编译环境 ADS/SDT IDE开发环境&#xff1a;它由ARM公司开…...

【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]

阅读导航 引言一、C异常的概念二、异常的使用1. 异常的抛出和捕获&#xff08;1&#xff09;throw&#xff08;2&#xff09;try-catch&#xff08;3&#xff09;catch(. . .)&#xff08;4&#xff09;异常的抛出和匹配原则&#xff08;5&#xff09;在函数调用链中异常栈展开…...

NX二次开发 Block UI 指定方位控件的应用

一、概述 NX二次开发中一般都是多个控件的组合&#xff0c;这里我首先对指定方位控件进行说明并结合选择对象控件&#xff0c;具体如下图所示。 二、实现功能获取方位其在选择面上原点的目标 2.1 在initialize_cb()函数中进行初始化&#xff0c;实现对象选择过滤面 //过滤平…...

2024年【R2移动式压力容器充装】模拟考试及R2移动式压力容器充装实操考试视频

题库来源&#xff1a;安全生产模拟考试一点通公众号小程序 2024年【R2移动式压力容器充装】模拟考试及R2移动式压力容器充装实操考试视频&#xff0c;包含R2移动式压力容器充装模拟考试答案和解析及R2移动式压力容器充装实操考试视频练习。安全生产模拟考试一点通结合国家R2移…...

数仓工具—Hive进阶之StorageHandler(23)

Storage Handler 引入Storage Handler,Hive用户使用SQL的方式读写外部数据源, 例如ElasticSearch、 Kafka、HBase等数据源的查询对非专业开发是有一定门槛的,借助Storage Handler,他们有了一种方便快捷的手段查询数据,Storage Handler作为Hive的存储插件,我们需要的时候直…...

科技创新创业

科技创新创业是一个涉及多个方面的过程&#xff0c;主要包括以下几个方面&#xff1a; 创意产生&#xff1a;创业的起始点通常是一个新的创意或想法&#xff0c;这可能是一个新的产品、服务或技术的概念。这个创意需要独特且具有商业潜力。市场调研&#xff1a;一旦有了创意&a…...

高校电力能耗监测精细化管理系统,提升能源利用效率的利器

电力是高校不可离开的重要能源&#xff0c;为学校相关管理人员提供在线用能查询统计等服务。通过对学校照明用电、空调用电等数据的采集、监控、分析&#xff0c;为学校电能管理制定合理的能源政策提供参考。同时&#xff0c;也可以培养学生的节能意识&#xff0c;学校后勤电力…...

Java_Swing程序设计

swing组件允许编程人员在跨平台时指定统一的外观和风格。 Swing组件通常被称为轻量级组件&#xff0c; JFrame在程序中的语法格式&#xff1a; JFrame jfnew JFrame(title); Container containerjf.getContentPane(); jf:JFrame类的对象 container:Container类的对象。 J…...

ZeroBind:DTI零样本预测器

现有的药物-靶点相互作用&#xff08;DTI&#xff09;预测方法通常无法很好地推广到新的&#xff08;unseen&#xff09;蛋白质和药物。 在这项研究中&#xff0c;作者提出了一种具有子图匹配功能的蛋白质特异性元学习框架 ZeroBind&#xff0c;用于根据其结构预测蛋白质-药物相…...

营销型门户网站/什么是搜索引擎优化的核心

大致介绍Angular2中数据绑定的方式默认是以单向方式&#xff0c;数据绑定的方式可以分为&#xff1a;1、属性绑定和插值表达式 组件类-> 模板2、事件绑定&#xff1a;模板 -> 组件类3、双向绑定&#xff1a; 模板 组件类事件绑定事件绑定是把模板中的事件绑定到组件类中的…...

宝塔面板wordpress静态化/百度热搜排名

通常写启动屏&#xff0c;都有个很不喜欢的问题&#xff0c;就是会空白几秒才显示界面&#xff0c;而且界面还是很简单的&#xff01; 解决办法 1 写一个透明的主题&#xff0c;一般启动屏都是不要bar的所以继承AppTheme.NoActionBar 1 <style name"Theme.AppStartLoa…...

我要自学网app/厦门seo外包

我在去年Teched上的课程视频录像&#xff0c;最终获得了整个Teched期间分值排名Top 5的课程。过去了一年时间&#xff0c;当年讲课的录像翻起来看似乎仍不过时。在开始之前再多说两句&#xff1a;从我的角度来看&#xff0c;整个课程是Teched 2012 《60分钟构建私有云 》课程的…...

如何建一个免费网站/百度站长平台官网登录入口

本文参考自《剑指offer》一书&#xff0c;代码采用Java语言。题目请实现一个函数用来匹配包含.和*的正则表达式。模式中的字符.表示任意一个字符&#xff0c;而*表示它前面的字符可以出现任意次(含0次)。在本题中&#xff0c;匹配是指字符串的所有字符匹配整个模式。例如&#…...

网站建设安全需求/百度安装免费下载

【广东最美的山】&#xff1a;肇庆鼎湖山点评&#xff1a;鼎湖山自然环境、历史沉淀、规模、各方面综合条件较好&#xff0c;最能代表广东山的美。【广东最美的峡谷】&#xff1a;乳源大峡谷点评&#xff1a;广东最大的峡谷&#xff0c;对驴友来说&#xff0c;最吸引人的是&…...

如何建立个人网站/新闻类软文营销案例

想了一会儿还是不知道怎么处理顺序这个情况。。。于是看了题解&#xff08;太弱啦qwq。。&#xff09; 膜hzwer大大 N辆车&#xff0c;M个工人。 把每个工人拆成N个点。记为A[i,j]表示第i个工人修倒数第j辆车。 每个车跟所有N*M个工人拆出的点连边。流量为1&#xff0c;费用为…...