之前使用Apache Camel作爲核心框架做過幾個項目,但時隔幾個月再將其集成到一個新項目中時,突然有種無從下手的感覺。
1. 概述
作爲一個擁有着極其活躍社區的組件, Apache Camel對於Spring支持可謂是極盡所能。強大社區的優勢,對於從.NET陣營轉到Java的筆者而言,五味雜陳。
2. Spring 集成
相較於SpringBoot的集成,單獨的Spring集成會稍微多幾個步驟,但也是非常方便快捷的。
-
推薦使用單獨的
spring-config-camel.xml
配置文件,並使用<import>
引入到主spring-config.xml
中。<beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:camel="http://camel.apache.org/schema/spring" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://camel.apache.org/schema/spring http://camel.apache.org/schema/spring/camel-spring.xsd"> <amel:camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <!--多個package可以使用 , 進行分割 --> <!--配置的路徑最終在 AbstractCamelContextFactoryBean.findRouteBuilders()中用來查找RouteBuilder, 因此是不會對Spring形成干擾的--> <camel:package>com.xxx.yyy.zzz</camel:package> </amel:camelContext> </beans>
-
以上XML配置,按照我們之前對於Spring源碼的理解,可以發現其解析入口爲
org.apache.camel.spring.handler.CamelNamespaceHandler
類。而針對於<amel:camelContext>
的解析則是委託給內部類CamelNamespaceHandler.CamelContextBeanDefinitionParser
來完成的。 -
而
<amel:camelContext>
對應於類CamelContextFactoryBean
(可以在本類上看到Camel使用JAXB來映射兩者的關係)。而第2步中提到的內部類CamelNamespaceHandler.CamelContextBeanDefinitionParser
正是以CamelContextFactoryBean
作爲構造函數參數的。
3. SpringBoot 集成
依託於SpringBoot強大的COC(Convention over Configuration)特性,Camel社區也是提供了相應的starter組件,使得集成變得如絲般潤滑。
<dependency>
<groupId>org.apache.camel</groupId>
<artifactId>camel-spring-boot-starter</artifactId>
<!--apache camel的另外一大貼心的地方就是, 一旦版本升級, 那麼其他相關的組件等的版本號也都會一併升級-->
<!-- use the same version as your Camel core version -->
<version>${camel.version}</version>
</dependency>
只需要在pom.xml
文件中引入以上依賴,基礎的配置工作就自動完成了,關於其中的原理可以參見筆者之前的一篇博文SpringBoot源碼解析之AutoConfiguration。
基礎配置完成之後,我們還需要自定義的路由規則來完成業務邏輯。方式如下:
@Component
public class CustomRouter extends RouteBuilder {
@Override
public void configure() throws Exception {
from("file:/me")//
.to("file:/invoices");
}
}
只需要以上兩步,你就可以開始愉快地享受Apache Camel給你的應用帶來的便捷性和穩固性。更多細節參加下方引用的官方文檔。
4. Links
- 《Apache Camel Developer’s Cookbook》 P21
- Apache Camel集成SpringBoot
- Apache Camel集成Spring
- Apache Camel archetypes生成Spring項目