随着软件世界的发展,正在开发更加复杂的系统,这些系统必须相互集成。 它从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相关推荐

  1. 2.24. Spring boot with Apache Kafka

    Spring boot 1.5.1 2.24.1. 安装 kafka 一下安装仅仅适合开发环境,生产环境请使用这个脚本安装 https://github.com/oscm/shell/tree/mas ...

  2. 基于Spring Boot应用Apache CXF发布Web Services服务

    记录:298 场景:使用Spring Boot应用Apache CXF发布Web Services服务,实现跨系统之间交互接口. 版本: JDK 1.8 Spring Boot 2.6.3 Apach ...

  3. Spring Boot 和Apache Kafka的集成

    点击上方蓝色"方志朋",选择"设为星标" 回复"666"获取独家整理的学习资料! 1. 引言 Apache Kafka 是一个分布式的.容错 ...

  4. 2. Spring Boot使用Apache Curator实现分布式锁(可重入排它锁)「第四章 ZooKeeper Curator应用场景实战」「架构之路ZooKeeper理论和实战」

    相关历史文章(阅读本文前,您可能需要先看下之前的系列

  5. 3.Spring Boot使用Apache Curator实现leader选举「第四章 ZooKeeper Curator应用场景实战」「架构之路ZooKeeper理论和实战」

    相关历史文章(阅读本文前,您可能需要先看下之前的系列

  6. apache camel 相关配置_Apache Camel Spring Boot

    Camel应用初始化 Apache Camel 采用的是组件化的设计思想,通过Camel Component对接第三方的应用,Camel核心模块会扫描classpath 加载这些Camel Compo ...

  7. Apache Camel是个什么玩意?

    初探Apache Camel Apache Camel 是基于EIP(Enterprise Integration Patterns)的一款开源框架.适用于异构系统间的集成和处理数据. 核心 Came ...

  8. java camel dsl,Apache Camel与Spring DSL

    我正在尝试使用spring DSL在Apache Camel中运行一个简单的应用程序 . 这是我的spring-config.xml 这是我的Java类测试: public class CamelSp ...

  9. 面试那点小事,你从未见过的spring boot面试集锦(附详细答案)

    一, 什么是spring boot? 多年来,随着新功能的增加,spring变得越来越复杂.只需访问页面https://spring.io/projects,我们将看到所有在应用程序中使用的不同功能的 ...

最新文章

  1. H3C Boot升级 Serial模式
  2. 自组织映射网络(SOM)如何解决TSP问题
  3. 【Linux 内核】调度器 ⑥ ( task_woken 函数 | set_cpus_allowed 函数 | rq_online 函数 | rq_offline 函数 )
  4. 产品经理必备知识之网页设计系列(一)-创建出色用户体验
  5. IDEA查看Java源码
  6. 内存数据库到底有多快?
  7. 详解:MySQL数据库的权限管理和运维实操
  8. 关于jet db的连接字串,以及加密后的字串
  9. 2014年度辛星css教程夏季版第五节
  10. 图像语义分割(3)-Dilated Conv:使用空洞卷积进行多尺度语义聚合
  11. 免费的WordPress Video Player插件
  12. 中标麒麟6 mysql_中标麒麟(linux)mysql配置记录
  13. linux pv命令,Linux系统下pv命令的一些使用技巧小结
  14. 【Django】基于PythonWeb的Django框架设计实现天天生鲜系统-7首页界面
  15. Android UI 基础知识
  16. 用马克思主义看待现社会拜金主义价值观
  17. 食神软件测试初学者,橙光游戏食神养成计划升阶攻略
  18. 腐肉为引,气球为信,负重前行,只为爱你
  19. 硬盘使用时间如何修改?
  20. html 最小长度单位,最小的长度单位是多长?

热门文章

  1. [luogu 4292][bzoj 1758][WC2010] 重建计划(点分治 + dp + 单调队列优化 + 启发式合并)
  2. BZOJ4504. K个串(主席树+优先队列)
  3. YbtOJ#652-集合比较【Treap】
  4. nssl1211-好文章【字符串hash,map】
  5. 2018CCF-CSP 5.二次求和(点分治)
  6. 简单的数据结构题(多项式、拉格朗日插值、线段树)
  7. Spark入门(十三)之分组求平均值
  8. Spark入门(四)Idea远程提交项目到spark集群
  9. Java开发必须掌握的5种加密策略
  10. Oracle入门(十三A1)之替换变量,变量名,变量名