要说apache camel能做什么,好像什么都能做:),它是一个庞大的系统,但应用是如此简单。诗篇建站系统在tomcat容器内使用camel。主要目的是增加系统的集成,如果不用camel,这些功能通过bash,crontab等等也可以完成,但是将这些功能代码都进入你的svn系统,在部署的时候不用在操作系统层次作修改,不是更方便吗?
诗篇建站系统只是简单的使用了camel中的少量组件.
1、timer,用来更新apache rewrite的一个map文件。
2、file,和http4,将文章的修改提交到apache solr服务器。
这是文章修改添加后的钩子。
@PostPersist
@PostUpdate
public void writeSolrXML2File(){
if(isAudit()){
SiteConfigService scf = injector.getInstance(SiteConfigService.class);
String fs = scf.getSorlCamelDir();
try {
File f = new File(fs,"article" + getId() + ".xml");
if(!f.exists())Files.createParentDirs(f);
Files.write(toSolrXML("add"), f , Charset.forName("UTF-8"));
} catch (IOException e) {
e.printStackTrace();
}
}
}
public class SolrRouter extends RouteBuilder{
@Inject
private SiteConfigService scf;
@Override
public void configure() throws Exception {
String ff = "file://e:/xxx";
String url = "http4://localhost:8080/solr/update";
if(!Osdetecter.isWindows()){
ff = "file:///usr/local/xxx/yyy";
url = "http4://localhost:8983/solr/update";
}
from(ff).setHeader(Exchange.HTTP_QUERY, constant("commit=true")).
setHeader(Exchange.CONTENT_TYPE, constant("Conntent-Type: text/xml")).
setHeader(Exchange.HTTP_CHARACTER_ENCODING, constant("UTF-8")).
setHeader(Exchange.HTTP_METHOD, constant(HttpMethods.POST)).to(url);
from("file:///home/xxx/dic?include=words-my.dic").
to("file:///usr/xx/xxx/apache-solr-3.2.0/xxx/solr/dic");
}
}
下面的描述,将让你体会到camel的便利。每次文章修改或者添加(当然还有删除),将需要索引的内容写入硬盘上的某个约定目录。camel看到那里有东西,就会把这个东西搬到solr服务器去。camle可以几乎可以将东西从任何源搬到任何目的地,同步或异步。
从:文件,电子邮件服务器,数据库(sql,jpa,spring,ibits),jms,定时器信息........,太多了,写也写不完。:)