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

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

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

相关文章

苹果android投屏,iphone怎么投屏到mac?苹果手机投屏到苹果电脑方法

iphone和mac的使用人群越来越多,其中投屏功能却难倒了大部分新手用户,许多使用iPhone以及Mac的用户朋友都还不知道iPhone怎么投屏到mac,好奇的用户朋友马上点击查看iphone投屏到mac教程来实现这个具有科技革新感的功能吧。官方推荐方法1:用数据线- 1.使用lightning线…

微服务java模块内存管理_Java 9模块服务

微服务java模块内存管理接线与查找 Java长期以来都有一个ServiceLoader类。 它是在1.6中引入的,但是自Java 1.2以来就使用了类似的技术。 一些软件组件使用了它,但是使用并不广泛。 它可以用于模块化应用程序(甚至更多)&#xff0…

使用实例工厂方法实例化_一些工厂实例

使用实例工厂方法实例化我时不时地发现自己摸索了一些旧代码,找到了“我在哪里做过类似工厂的事情”的示例。 上周再次发生这种情况时,我决定只查找所有示例,并创建一个示例项目和有关该示例的博客文章。 所以在这篇文章中,我&a…

linux内核设计与实现 epub_Epoll学习服务器的简单实现-Linux内核Epoll结构

1.Begins~有的人学习linux编程很久,只知道网络编程是socket,bind, listen。。。,然而这些都是网络通信软件最基本的接口。在某网络公司待了y,也了解到公司的基础就是网络转发 ,然而网络转发实现并非我们平时…

鸿蒙有安卓内核吗,华为鸿蒙2.0可以替代安卓吗,华为鸿蒙2.0优势在哪

在华为开发者大会上,华为消费业务CEO 余承东,正式发布鸿蒙OS2.0,并宣布华为鸿蒙OS将全面启用全场景生态,并将于2020年12月发布手机版。余承东还表示,明年,华为的智能手机将全面升级,以支持鸿蒙操…

命名对象实体对象_我的对象命名

命名对象实体对象这是最常见的辩论之一。 大多数人对此主题有自己的见解,却没人能真正说出哪个是正确的。 我当然不能,但是尽管如此,我还是决定与大家分享我的想法,投入两美分,也许对某人会有帮助。 当我创建一个新类…

微信html人脸识别接口,微信人脸识别可视化的实现:

实现方式主要通过以下模块实现:DateFromWebChat (从网页版微信窗口下载好友头像)AI (识别模块,主要用于识别好友头像是否为人脸,并且计算人脸的数量与头像的总数且return)DateVisul (数据可视化模块,用与AI模块返回参数的可视化)u…

安卓手机端运行的adb工具_MQTT通信手机端接收生产车间设备运行信息3

应用场景:对车间重点设备的运行参数进行实时跟踪。比如烘干炉的烟囱温度、TNV的出口温度、喷漆室的温湿度、小时产量等等信息。以前这些信息的获取都需要在电脑端获取、相对比较繁琐。这里我们选择在手机端实现获取这些信息。尤其是对于作者这样的设备负责人而言&am…

jsf 项目_您将在下一个项目中使用JSF吗?

jsf 项目上周有一篇很棒的stackoverflow博客文章,主题是“ Javascript框架的残酷生命周期” 。 这篇文章是关于Javascript UI框架(angularjs,angular,jquery和react)的流行和流行的速度。 这篇文章的关键指标是每月关于…

查询varchar实际大小_微服务和VUE(11): mybatis 动态查询

1. 新建class表和student表:CREATE TABLE class ( class_id varchar(20) NOT NULL, class_name varchar(50) DEFAULT NULL, headmaster_name varchar(20) DEFAULT NULL, headmaster_tel varchar(20) DEFAULT NULL, PRIMARY KEY (class_id)) ENGINEInnoDB …

Linux 如何安装程序的源代码软件包/源码程序包/源码包?

文章目录一、安装源码包的三个步骤(一)执行命令 configure,进行配置/检测(二)执行命令 make,编译源码(三)执行命令 make install,安装软件二、源码包安装示例&#xff08…

如何取消ie.html,IE浏览器安全警告怎么关闭

部分用户在使用IE浏览器打开某些页面的时候,可能会出现一个“安全警告”的对话框,虽然影响不大,但是每次出现都让人很烦闷,这个时候你就可以根据下面的操作去关闭这个功能。自从百度近日开启了HTTPS安全网页功能之后,每…

sql 计算两个小数乘积_数学篇|学会这些数学计算技巧,想不满分都难!

计算是小学数学的基础,四则运算和混合运算是计算要考察的重点。在这里我们总结了小学用到的所有计算定律和简便方法,包括运算定律、运算法则、运算顺序和速算技巧四大部分,帮助小学生牢固掌握数学知识点。先赞后看,收获满满&#…

mysql两个字段相减_MySQL 中NULL和空值的区别?

作为后台开发,在日常工作中如果要接触Mysql数据库,那么不可避免会遇到Mysql中的NULL和空值。那你知道它们有什么区别吗?学不动了,也不想知道它们有什么区别。大兄弟,不行啊,要面试!前些天我的好…

做好计划事半功倍论文_Picocli 2.0:事半功倍

做好计划事半功倍论文介绍 Picocli是一个单文件命令行解析框架,它使您几乎不需要任何代码即可创建命令行应用程序。 使用Option或Parameters注释应用程序中的字段,picocli将分别使用命令行选项和位置参数填充这些字段。 例如: Command(name …

srp unity_SRP是骗局

srp unity根据罗伯特马丁 ( Robert Martin)的 《 清洁法 》( Clean Code) ,“ 单一责任原则 ”意味着“一个阶级应该只有一个改变的理由”。 让我们尝试解密这个模糊的语句,看看它如何帮助我们设计更好的面…

html5app大赛,Anyoffice -HTML5大赛 悦心(基于H5开发安卓音乐app)-项目总结

悦心,一款音乐播放器应用。由“女立方”团队开发。眼下。较为流行的音乐播放器有QQ音乐、网易云音乐、多米音乐等。“悦心”音乐播放器的主要功能,提供音乐数据库,点击列表播放音乐,还可对歌曲进行收藏。加入专属音乐心情功能。1.歌曲播放过程…

python 40位的数减个位数_Python——进制表示与转换

在前面两篇文章中介绍了基本的数据类型(Python——记录3——数据类型1,Python——记录4——数据类型2),其中讲到浮点数的计算是通过转换成二进制进行的,那么到底什么是二进制,以及计算机到底包含了哪些进制呢?其实0和1…

javaee概览_Java 9概览

javaee概览对于许多Java 9来说,似乎是一个维护版本,它推动了不能在Java 8中实现的项目Jigsaw。但是,随着JDK中的新模块系统以及与之相关的许多内部更改,Java 9也带来了开发人员工具箱中一些很棒的新内容。 以下是重点内容&#xf…

opc调试软件_组态王和三菱OPC软件完美演绎天塔之光

许多朋友因为在学习组态王的过程中因为没有实物PLC而发愁,这里我通过天塔之光实例分享一个三菱OPC软件模拟实物PLC与组态王通信的方法。一、需要软件组态王软件三菱PLC编程软件GX Works2三菱OPC软件MX OPC Configurator二、控制要求主画面如上图所示的天塔灯光&…