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(); }
}