Apache Camel —— 一种Enterprise Integration Patterns的实现; 参考《企业集成模式:设计、构建及部署消息传递解决方案》。
提供消息路由route:基本功能是接受消息、处理消息和分派消息。
通过Java领域特定语言DSL(基于Camel 提供的java API, 或者Spring配置文件等)来配置路由和处理规则。其核心的思想是从一个from源头得到数据,通过Processor处理,再发到另一个to目的地。
Camel使用URIs表示不同的消息传输模型。
目前支持的URIs类型:
disruptor://
file://
ftp://
hbase://
hdfs://
http://
ibatis://
jdbc://
jms://
jmx://
jpa://
ldap://
quartz://
rmi://
quickfix://
smtp://
sql:
zookeeper:
spring-redis://
,.etc ... ...
第三方扩展:
activemq://
hibernate://
zeromq://
,.etc ... ...
E.g.
E1: ftp - 文件系统路由
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("ftp://localhost/inbox?username=yorker&password=123456").to(
"file:d:/temp/outbox");
}
});
context.start();
boolean loop = true;
while (loop) {
Thread.sleep(25000);
}
context.stop();
E2: jms路由
private static String user = ActiveMQConnection.DEFAULT_USER;
private static String password = ActiveMQConnection.DEFAULT_PASSWORD;
private static String url = ActiveMQConnection.DEFAULT_BROKER_URL;
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
ConnectionFactory connectionFactory =
new ActiveMQConnectionFactory(user, password, url);
context.addComponent("jms",
JmsComponent.jmsComponentAutoAcknowledge(connectionFactory));
System.out.println(url + " " + user + password);
context.addRoutes(new RouteBuilder() {
public void configure() {
from("file:d:/temp/inbox").to(
"jms:queue:TOOL.DEFAULT");
}
});
context.start();
boolean loop = true;
while (loop) {
Thread.sleep(25000);
}
context.stop();
}
E3: http路由
public class HttpPollWithQuartzCamel {
public static void main(String args[]) throws Exception {
CamelContext context = new DefaultCamelContext();
context.addRoutes(new RouteBuilder() {
public void configure() {
from("quartz://report?cron=10 * * * * ?&stateful=true")
.to("http://localhost:8080/prjWeb/test.camelreq")
.to("file:d:/temp/outbox?fileName=http.csv");
);
}
});
context.start();
boolean loop = true;
while (loop) {
Thread.sleep(25000);
}
context.stop();
}
}