Spring Boot和Apache Camel
随着软件世界的发展,正在开发更加复杂的系统,这些系统必须相互集成。 它从SOA开始,然后一直到微服务。
骆驼是我想到的第一大集成工具,因为如今的骆驼springboot是一个非常强大的组合。
第一步是将骆驼依赖项包含到我们的spring项目中。
buildscript {ext {springBootVersion = '1.5.9.BUILD-SNAPSHOT'}repositories {mavenCentral()maven { url "https://repo.spring.io/snapshot" }maven { url "https://repo.spring.io/milestone" }}dependencies {classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")}
}apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'org.springframework.boot'group = 'com.gkatzioura'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = 1.8repositories {mavenCentral()maven { url "https://repo.spring.io/snapshot" }maven { url "https://repo.spring.io/milestone" }
}dependencies {compile('org.apache.camel:camel-spring-boot-starter:2.20.0')testCompile('org.springframework.boot:spring-boot-starter-test')testCompile('org.apache.camel:camel-test-spring:2.20.0')
}
为了从头开始更快地进行项目设置,您可以始终使用在线spring 初始化程序 。
现在让我们添加一条简单的路线
package com.gkatzioura.springcamel.routes;import org.apache.camel.builder.RouteBuilder;
import org.springframework.stereotype.Component;@Component
public class TimerRoute extends RouteBuilder {public static final String ROUTE_NAME = "TIMER_ROUTE";@Overridepublic void configure() throws Exception {from("timer:initial//start?period=10000").routeId(ROUTE_NAME).to("log:executed");}
}
我们不必担心骆驼上下文的配置,因为Camel自动配置会为您创建一个SpringCamelContext并负责该上下文的正确初始化和关闭。
骆驼自动配置还从Spring上下文中收集所有RouteBuilder实例,并将它们自动注入到提供的CamelContext中。 因此,我们不必注册到CamelContext的路线。
如您所见,我们的路由具有一个计时器,该计时器的周期为10000毫秒,该计时器路由到日志端点。 日志端点将每10000毫秒打印一次执行的字符串。
请记住,如果未指定routeId,骆驼将自己分配一个名称,因此在我们要检索根定义的情况下,为我们的路线定义命名是一个好习惯。
为了使骆驼保持不动,我们需要保持主线程处于阻塞状态。 因此,我们将此配置添加到application.yml文件中。
camel:springboot:main-run-controller: true
代替这个,我们可以包括spring-boot-starter-web依赖关系,但是我们的应用程序具有尽可能少的依赖关系,因此我们需要保持这种方式。
但是,与其他系统集成中最困难的部分是测试。 多年来,我们在测试和使用的工具方面取得了长足的进步。
骆驼还带有一些很棒的工具,以便进行单元测试。
例如,我们将对先前指定的路线进行测试。
@RunWith(CamelSpringBootRunner.class)
@SpringBootTest
public class SpringCamelApplicationTests {@EndpointInject(uri = MOCK_RESULT)private MockEndpoint resultEndpoint;@Autowiredprivate CamelContext camelContext;@EndpointInject(uri = MOCK_TIMER)private ProducerTemplate producer;private static final String MOCK_RESULT = "mock:result";private static final String MOCK_TIMER = "direct:mock-timer";@Beforepublic void setup() throws Exception {camelContext.getRouteDefinition(TimerRoute.ROUTE_NAME).autoStartup(true).adviceWith(camelContext, new AdviceWithRouteBuilder() {@Overridepublic void configure() throws Exception {replaceFromWith(MOCK_TIMER);interceptSendToEndpoint("log*").skipSendToOriginalEndpoint().to(MOCK_RESULT);}});}@Testpublic void sendMessage() throws Exception {resultEndpoint.expectedMessageCount(1);producer.sendBody("A message");resultEndpoint.assertIsSatisfied();}}
让我们看一下测试的每个部分。
我们选择的JUnit运行器将是CamelSpringBootRunner.class
@RunWith(CamelSpringBootRunner.class)
我们注入一个ProducerTemplate 。 通过ProducerTemplate接口,您可以通过各种不同的方式将消息交换发送到端点,从而可以轻松地从Java代码使用Camel Endpoint实例。
然后我们注入一个MockEndpoint。 MockEndpoint将通过替换原始端点为我们服务。 然后,我们将设置预期的接收消息数。 处理完成后,我们断言已满足接收消息的数量。
在我们的设置方法中,我们将用伪造的生产者模板端点替换原始端点。 这样,我们的路线将接收到我们将从ProducerTemplate发出的事件。
然后,我们还将拦截日志端点,并将消息定向到先前指定的MockEndpoint。
因此,我们最终得到了骆驼应用程序和指定路线的单元测试。 您可以在github上找到源代码。
翻译自: https://www.javacodegeeks.com/2017/11/spring-boot-apache-camel.html
Spring Boot和Apache Camel相关推荐
- 2.24. Spring boot with Apache Kafka
Spring boot 1.5.1 2.24.1. 安装 kafka 一下安装仅仅适合开发环境,生产环境请使用这个脚本安装 https://github.com/oscm/shell/tree/mas ...
- 基于Spring Boot应用Apache CXF发布Web Services服务
记录:298 场景:使用Spring Boot应用Apache CXF发布Web Services服务,实现跨系统之间交互接口. 版本: JDK 1.8 Spring Boot 2.6.3 Apach ...
- Spring Boot 和Apache Kafka的集成
点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 引言 Apache Kafka 是一个分布式的.容错 ...
- 2. Spring Boot使用Apache Curator实现分布式锁(可重入排它锁)「第四章 ZooKeeper Curator应用场景实战」「架构之路ZooKeeper理论和实战」
相关历史文章(阅读本文前,您可能需要先看下之前的系列
- 3.Spring Boot使用Apache Curator实现leader选举「第四章 ZooKeeper Curator应用场景实战」「架构之路ZooKeeper理论和实战」
相关历史文章(阅读本文前,您可能需要先看下之前的系列
- apache camel 相关配置_Apache Camel Spring Boot
Camel应用初始化 Apache Camel 采用的是组件化的设计思想,通过Camel Component对接第三方的应用,Camel核心模块会扫描classpath 加载这些Camel Compo ...
- Apache Camel是个什么玩意?
初探Apache Camel Apache Camel 是基于EIP(Enterprise Integration Patterns)的一款开源框架.适用于异构系统间的集成和处理数据. 核心 Came ...
- java camel dsl,Apache Camel与Spring DSL
我正在尝试使用spring DSL在Apache Camel中运行一个简单的应用程序 . 这是我的spring-config.xml 这是我的Java类测试: public class CamelSp ...
- 面试那点小事,你从未见过的spring boot面试集锦(附详细答案)
一, 什么是spring boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问页面https://spring.io/projects,我们将看到所有在应用程序中使用的不同功能的 ...
最新文章
- H3C Boot升级 Serial模式
- 自组织映射网络(SOM)如何解决TSP问题
- 【Linux 内核】调度器 ⑥ ( task_woken 函数 | set_cpus_allowed 函数 | rq_online 函数 | rq_offline 函数 )
- 产品经理必备知识之网页设计系列(一)-创建出色用户体验
- IDEA查看Java源码
- 内存数据库到底有多快?
- 详解:MySQL数据库的权限管理和运维实操
- 关于jet db的连接字串,以及加密后的字串
- 2014年度辛星css教程夏季版第五节
- 图像语义分割(3)-Dilated Conv:使用空洞卷积进行多尺度语义聚合
- 免费的WordPress Video Player插件
- 中标麒麟6 mysql_中标麒麟(linux)mysql配置记录
- linux pv命令,Linux系统下pv命令的一些使用技巧小结
- 【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-7首页界面
- Android UI 基础知识
- 用马克思主义看待现社会拜金主义价值观
- 食神软件测试初学者,橙光游戏食神养成计划升阶攻略
- 腐肉为引,气球为信,负重前行,只为爱你
- 硬盘使用时间如何修改?
- html 最小长度单位,最小的长度单位是多长?
热门文章
- [luogu 4292][bzoj 1758][WC2010] 重建计划(点分治 + dp + 单调队列优化 + 启发式合并)
- BZOJ4504. K个串(主席树+优先队列)
- YbtOJ#652-集合比较【Treap】
- nssl1211-好文章【字符串hash,map】
- 2018CCF-CSP 5.二次求和(点分治)
- 简单的数据结构题(多项式、拉格朗日插值、线段树)
- Spark入门(十三)之分组求平均值
- Spark入门(四)Idea远程提交项目到spark集群
- Java开发必须掌握的5种加密策略
- Oracle入门(十三A1)之替换变量,变量名,变量名