Apache Camel笔记

news2024/11/28 2:50:55

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.json
    	String 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',才执行route
    from:
      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_1
    steps:
      # 往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_BEAN
    steps:
    	# 发送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_REQUEST
    steps:
    	- to: bean:logUtils?method=generateLog

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

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

相关文章

03、Kafka ------ CMAK(Kafka 图形界面管理工具) 下载、安装、启动

目录 CMAK&#xff08;Kafka 图形界面管理工具&#xff09;下载安装启动打开 cmak 图形界面 CMAK&#xff08;Kafka 图形界面管理工具&#xff09; Kafka本身并没有提供Web管理工具&#xff0c;而是推荐使用bin目录下各种工具命令来管理Kafka&#xff0c; 这些工具命令其实用起…

玻色量子正式获准设立博士后科研工作站!即日起正式开启招聘!

​2023年11月21日&#xff0c;北京市人力资源和社会保障局在亦庄成功举办了“凝聚中国式现代化进程中的博士后力量推进会暨第二届全国博士后创新创业大赛北京赛区总结”。为加强博士后工作对提高企业创新能力的支持力度&#xff0c;推动产学研深度融合&#xff0c;经专家评议、…

Flyweight享元/共享模式(对象性能)

Flyweight 链接&#xff1a;享元模式实例代码 解析 目的 在软件系统采用纯粹对象方案的问题在于大量细粒度的对象会很快充斥在系统中&#xff0c;从而带来很高的运行时代价——主要指内存需求方面的代价。如何在避免大量细粒度对象问题的同时&#xff0c;让外部客户程序仍然…

全国计算机等级考试| 二级Python | 真题及解析(7)

一、选择题 1.python中,表达式5%2 = ( )。 A.2.5 B.2 C.1 D.0 2.已知字符串a="python",则a[ 1 : 3 ]的值为( ) A."pyth" B."pyt" C."py" D…

Java-replaceAll()同时替换多个字符

今天复现了raplaceAll&#xff08;&#xff09;的用法&#xff0c;但是通常都是对一种字符进行替换&#xff0c;我就在想有没有操作可以一次性替换多个不同的字符&#xff0c;百度一搜&#xff0c;果然有。具体情况如下 首先是替换字的 String str1 "小明&#xff0c;小…

JRT实现表格元素

数据结构决定算法基础&#xff0c;良好的设计可以极大的减轻上层的复杂度。以前由于受限M没画笔&#xff0c;都得通过Webservice代理出去&#xff0c;所以实现一些效果比较难。用M控制打印绘制表格就很费劲。但是打印报告结果、药敏等很多都是列表排版。用TextLength控制换行或…

wy的leetcode刷题记录_Day72

wy的leetcode刷题记录_Day72 声明 本文章的所有题目信息都来源于leetcode 如有侵权请联系我删掉! 时间&#xff1a; 前言 目录 wy的leetcode刷题记录_Day72声明前言2397. 被列覆盖的最多行数题目介绍思路代码收获 1137. 第 N 个泰波那契数题目介绍思路代码收获 2397. 被列覆…

MATLAB全局最优搜索函数:GlobalSearch函数

摘要&#xff1a;本文介绍了 GlobalSearch 函数的使用句式&#xff08;一&#xff09;、三个运行案例&#xff08;二&#xff09;、以及 GlobalSearch 函数的参数设置&#xff08;三、四&#xff09;。详细介绍如下&#xff1a; 一、函数句法 Syntax gs GlobalSearch gs Glo…

java 6种深拷贝集合方式及其性能差异对比

文章目录 ArrayList 构造方法拷贝运行1000次耗时 1ms for循环拷贝运行1000次耗时 14ms Stream流 collect实现拷贝运行1000次耗时 54ms Stream流spring的BeanUtils实现拷贝运行1000次耗时 2468 ms Hutool工具实现拷贝Hutool 5.7.13版本运行1000次耗时 64674 msHutool 5.8.24版本…

LiveGBS国标GB/T28181流媒体平台功能-国标级联中作为下级平台对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话

LiveGBS国标级联中作为下级平台对接海康大华宇视华为政务公安内网等GB28181国标平台查看级联状态及会话 1、GB/T28181级联是什么2、搭建GB28181国标流媒体平台3、获取上级平台接入信息3.1、如何提供信息给上级3.2、上级国标平台如何添加下级域3.2、接入LiveGBS示例 4、配置国标…

推荐Linux和Ubuntu系统中特别有用的几个指令

常用推荐指令 1.在Ubuntu中好多文件或文件夹是不能使用右键删除的&#xff0c;因此知道删除文件或文件夹的rm命令显得尤为重要。 &#xff08;1&#xff09;删除文件夹的内容包括文件夹: # 以最高权限删除 sudo rm -rf 文件夹的名字 #&#xff08;-r 是循环的意思&…

高精度、大电流、低压差电压调整器芯片 D2632,可以用于电池供电设备等产品上

D2632是一款高精度、大电流、低压差电压调整器。主要作为电源装置提供高效的电压调整。 最大输出电流可达3A&#xff0c;并且外接器件少&#xff0c;拥有输出电压(ADJ) 可调特点。 主要特点&#xff1a; 1. 低压差(满载350mV); 2. 地电流小; …

Python trash-cli模块实现Linux服务器回收站

概述&#xff1a; trash-cli是一个用于管理类 Unix 系统垃圾箱的命令行工具。它提供了一个安全的替代方案来代替传统的 rm 命令&#xff0c;后者会永久删除文件和目录。使用 trash-cli&#xff0c;文件和目录被移动到垃圾箱中&#xff0c;这样就可以在意外删除的情况下恢复它们…

【Nginx】在线安装与离线安装

目录 1、下载nginx news 1.2、 安装包 2、 在线安装 第一步&#xff0c;安装pcre 第二步&#xff0c;安装openssl 、zlib 、 gcc 依赖 第三步&#xff0c;安装nginx 第四步&#xff0c;关闭防火墙&#xff0c;访问nginx ​编辑 3、 离线安装 第一步 安装pcre 第二步…

android 通过反射获取U盘路径地址

2015-01-20 21:37:05.420 26674-26674/ E/MainActivity: ---getUsbPath() length2 2015-01-20 21:37:05.420 26674-26674/E/MainActivity: ---getUsbPath()[/storage/emulated/0, /storage/D65A-07AE]

电脑提示“KBDRU1.DLL文件缺失”,导致游戏和软件无法启动运行,快速修复方法

看到很多小伙伴&#xff0c;在问电脑启动某些软件或游戏的时候&#xff0c;提示“KBDRU1.DLL文件缺失&#xff0c;软件无法启动&#xff0c;请尝试重新安装&#xff0c;解决问题”&#xff0c;不知道应该怎么办&#xff1f; 首先&#xff0c;我们要先了解“KBDRU1.DLL文件”是什…

激光焊接机:塑料产品制造中的革命性优势

随着科技的飞速发展&#xff0c;激光焊接机在塑料产品制造领域的应用越来越广泛。相较于传统的焊接技术&#xff0c;激光焊接机在塑料产品制造中展现出诸多优势&#xff0c;成为现代工业生产中不可或缺的一部分。 一、精确、高效的焊接性能 激光焊接机采用高能激光束作为焊接热…

【 RF 射频 电缆】 MIL-C-17F 标准 规格

第〇、&#xff1f;&#xff1f; RGXXXXX 第一、应用场景 标准号应用场景–&#xff08;–&#xff09;RG-8 RG-9 RG-11粗缆以太网–RG-58细缆以太网–RG-59 RG-75电视系统–RG-62ARCnet网络和IBM 3270网络–RG142电信设备之间的互连 航空电子机架 雷达 GPS 医疗–RG178通信…

基于深度学习的PCB板缺陷检测系统(含UI界面、yolov8、Python代码、数据集)

项目介绍 项目中所用到的算法模型和数据集等信息如下&#xff1a; 算法模型&#xff1a;     yolov8 yolov8主要包含以下几种创新&#xff1a;         1. 添加注意力机制&#xff08;SE、CBAM等&#xff09;         2. 修改可变形卷积&#xff08;DySnake-主干c…

开发知识点-Weblogic

Weblogic 介绍CVE_2018_2628poc-yaml-weblogic-ssrfpoc-yaml-weblogic-cve-2017-10271poc-yaml-weblogic-cve-2019-2725poc-yaml-weblogic-cve-2019-2729-1poc-yaml-weblogic-cve-2019-2729-2poc-yaml-weblogic-cve-2020-14750poc-yaml-weblogic-local-cve-2022-21371-file-inc…