当前位置: 首页 > 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
http://www.lryc.cn/news/276638.html

相关文章:

  • CSDN定制的奖品谁不想要?
  • 橄榄油行业分析:预计2029年将达到298亿美元
  • Maven 工程 java -jar 时提示 xxx-SNAPSHOT.jar 中没有主清单属性
  • 2. Mybatis 中SQL 执行原理
  • 平衡合规与发展天平, 激发数据要素价值
  • JAVA毕业设计118—基于Java+Springboot的宠物寄养管理系统(源代码+数据库)
  • oracle 19c容器数据库数据加载和传输-----SQL*Loader(一)
  • 超维空间M1无人机使用说明书——52、ROS无人机二维码识别与降落
  • Mac 安装Nginx教程
  • 【促销定价】背后的算法技术 1 - 业务问题拆解
  • CNAS中兴新支点——什么是安全测试,安全测试报告有什么作用,主要测试哪些内容?
  • 【shell发送邮件】
  • Qt实现简单的分割窗口
  • 简单易懂的PyTorch激活函数大全详解
  • x-cmd pkg | pdfcpu - 强大的 PDF 处理工具
  • linux 压力测试 AB ApacheBench
  • 【云计算】云存储是什么意思?与本地存储有什么区别?
  • 月入7K,19岁少年转行网优,他凭什么打破低学历魔咒?
  • 【C/C++】轻量级跨平台 开源串口库 CSerialPort
  • 大创项目推荐 深度学习图像修复算法 - opencv python 机器视觉
  • 嵌入式系统复习--基于ARM的嵌入式程序设计
  • 【C++入门到精通】异常 | 异常的使用 | 自定义异常体系 [ C++入门 ]
  • NX二次开发 Block UI 指定方位控件的应用
  • 2024年【R2移动式压力容器充装】模拟考试及R2移动式压力容器充装实操考试视频
  • 数仓工具—Hive进阶之StorageHandler(23)
  • 科技创新创业
  • 高校电力能耗监测精细化管理系统,提升能源利用效率的利器
  • Java_Swing程序设计
  • ZeroBind:DTI零样本预测器
  • Win10子系统Ubuntu实战(一)