javascript
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的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 台式机电脑怎样在BIOS里设置U盘启动如
- 下一篇: postgresql_PostgreSQ