我需要将一些客户的网站从其它地方迁移到我的诗篇在线建站系统中去,由此开始了将近一个星期的与camel的接触,确实是一个宏大的程序。先看一张camel的router。apache camel 路由图
对应的java DSL:
from("jms:TOOL.CLONE.PAGE").beanRef("clonepage")
.split().body()
.choice()
.when().mvel("request.body[0] == 'img'").beanRef("clonepage", "processImg")
.when().mvel("request.body[0] == 'css'").beanRef("clonepage", "processCss").to("direct:cssimg")
.when().mvel("request.body[0] == 'script'").beanRef("clonepage", "processScript")
.otherwise().beanRef("clonepage", "processOthers");
from("direct:cssimg").split().body().beanRef("clonepage", "processImg");
流程说明:
从诗篇建站系统的后台发出一个复制页面的指令,将要复制的页面的参数包装后发送到activemq去。接下来就交给apache camel处理了,这是运行在另一个VM里面,和建站系统是解构的。camel从消息队列中获取消息,然后将要克隆的页面取下来,这是第一步,因为取下来的页面中包含许多img,css,javascript链接,这些链接在clonepage的默认处理方法中获取,然后交个下一个路由,当然css里面还包含有img图片,必须额外处理。
先看看克隆的效果吗?这是iteye的首页克隆:
http://demo.m3958.com/iteye ,请注意没有任何手工修改,完全是程序自动克隆的。
这是guice配置:
@Override
protected void configure() {
super.configure();
// lets add in any RouteBuilder instances we want to use
bind(MyRouteBuilder.class);
bind(Printer.class);
}
/**
* Lets configure the JMS component, parameterizing some properties from the
* jndi.properties file
*/
@Provides
@JndiBind("jms")
JmsComponent jms(@Named("activemq.brokerURL") String brokerUrl) {
return JmsComponent.jmsComponent(new ActiveMQConnectionFactory(brokerUrl));
}
@Provides
@JndiBind("myBean")
SomeBean someBean(Injector injector) {
return injector.getInstance(SomeBean.class);
}
private static final String PERSISTENCE_UNIT_NAME = "p-unit";
public static EntityManagerFactory factory = Persistence.createEntityManagerFactory(PERSISTENCE_UNIT_NAME);
// @Provides
// EntityManager emp(){
// return MyModule.factory.createEntityManager();
// }
@Provides
@JndiBind("hpb")
HttpProcessBean hpb(Injector injector) {
return injector.getInstance(HttpProcessBean.class);
}
@Provides
@JndiBind("extrator")
ArticleExtrator extrator(Injector injector){
return injector.getInstance(ArticleExtrator.class);
}
@Provides
@JndiBind("clonepage")
ClonePage clonepage(Injector injector){
return injector.getInstance(ClonePage.class);
}
处理css的代码片段:
public void processCss(@Header("sitetr") String siteThemeRoot, @MVEL("request.body[1]") final String pageUrl,@MVEL("request.body[2]") String saveFileName,Exchange exchange){
ProducerTemplate template = context.createProducerTemplate();
//in-out pattern.
Exchange ecc = template.send("http4://localhost",new Processor() {
@Override
public void process(Exchange exchange) throws Exception {
exchange.getIn().setHeader(Exchange.HTTP_URI,"http4://" + pageUrl);
}
});
Message out = ecc.getOut();
String c = out.getBody(String.class);
List<String[]> relations = new ArrayList<String[]>();
//url(../Images/lian.gif)
Pattern p = Pattern.compile("url\\s*?\\(['\"\\s]*(.*?)['\"\\s]*\\)");
Matcher m = p.matcher(c);
String[] hu = getHostnameUri(pageUrl);
while(m.find()){
String url = m.group(1);
relations.add(getOneItem(url, "img", null, hu[0], hu[1]));
}
exchange.getOut().setHeader("sitetr", siteThemeRoot);
exchange.getOut().setBody(relations);
template.sendBodyAndHeader("file://" + siteThemeRoot,c,Exchange.FILE_NAME,saveFileName);
}
分享到:
相关推荐
Apache Camel 是一个强大的开源框架,专门用于构建企业级应用程序中的集成解决方案。它提供了一种声明式的方式,使得开发者可以轻松地定义数据路由和处理规则,从而实现系统间的通信。这个"Apache Camel 开发使用...
Apache Camel 是一个流行的开源集成框架,它允许开发者以声明式的方式定义路由和转换数据,使得在不同的软件组件之间实现通信变得更加简单。JDBC(Java Database Connectivity)是Java平台中的一个标准API,用于与...
Apache Camel是Apache软件基金会下的一个开源集成框架,它实现了企业集成模式(Enterprise Integration Patterns,EIP),旨在简化在企业中的应用程序、系统和服务之间的集成工作。Camel支持多种传输协议,如HTTP、...
Apache Camel是一种开源的集成框架,其目的在于简化企业应用集成和规则流程的开发。它基于企业集成模式(Enterprise Integration Patterns),使得不同系统之间的消息传递和数据交换变得更加容易。Apache Camel支持...
*Message-Oriented Middleware(MOM):Apache Camel 框架可以用来实现 MOM,提供了一个灵活的方式来集成不同的应用程序和服务。 *Enterprise Service Bus(ESB):Apache Camel 框架可以用来实现 ESB,提供了一个...
### Apache Camel 集成组件教程 #### 一、Apache Camel 概述 Apache Camel 是一个强大的开源消息中间件框架,旨在简化企业级应用中的消息处理逻辑。它提供了一种简单而灵活的方式来定义复杂的路由和数据转换规则。...
Apache Camel 是一个强大的开源企业级集成框架,它简化了在Java应用程序之间建立复杂的消息传递流程。这个"Apache Camel 开发指南"压缩包包含了丰富的资源,帮助开发者深入理解Camel的各个方面,包括路由表达式、...
Apache Camel 是一个流行的开源集成框架,它允许开发者在不同的系统、协议和服务之间建立灵活的数据通信。FTP(File Transfer Protocol)是互联网上广泛使用的文件传输协议,用于上传、下载和管理远程服务器上的文件...
Apache Camel 是一个强大的开源企业集成库,它提供了一种模型化的路由和消息转换方式,使得开发者可以轻松地在各种系统间构建复杂的集成解决方案。CXF 是一个流行的开放源代码服务框架,它支持多种Web服务标准,如...
Apache Camel 是一个强大的开源企业集成库,它提供了一种声明式的方式来定义路由和转换数据,使得构建复杂的分布式系统变得更加简单。Camel 使用一种名为“DSL”(Domain Specific Language)的语法规则,允许开发者...
Apache Camel 是一个强大的开源集成框架,它允许开发者在各种组件之间路由、转换和处理消息,以构建企业级的集成解决方案。在这个"01-ApacheCamel-HelloWorld"示例中,我们将深入理解如何使用 Camel 实现一个简单的 ...
Apache Camel 是一个强大的开源框架,专门用于构建企业级集成解决方案。在标题“apache-camel-3.7.0_数据同步_”中提到的“数据同步”,是指利用Apache Camel实现不同系统、数据库或应用程序间的数据交换和一致性...
Java_Apache Camel Spring Boot示例是一个综合性的项目,展示了如何在Spring Boot应用程序中集成Apache Camel框架。Apache Camel是一个流行的开源框架,它简化了企业级集成(EIP,Enterprise Integration Patterns)...
简化软件集成:一个ApacheCamel教程在本教程中,您将了解集成大型软件的一些最大挑战,以及ApacheCamel如何轻松解决这些难题。在您的软件工程中,您可能至少做了一次以下操作:1.确定应启动数据发送的业务逻辑片段。...
Apache Camel 是一个强大的开源集成框架,它允许开发者通过声明式的方式连接不同的系统和服务,实现企业级应用程序的集成。这个框架的核心理念是“企业集成模式”(Enterprise Integration Patterns),它提供了丰富...
2. **下载和解压Camel**:从Apache官方网站下载最新版的Camel发行包,解压后放入你想要的目录。 3. **运行Camel**:你可以使用命令行工具启动Camel上下文,或者将Camel集成到你喜欢的Java应用服务器中,如Tomcat或...
Apache Camel 是一个强大的开源集成框架,它允许开发者以声明式的方式定义路由和转换数据。JMS(Java Message Service)是Java平台中用于消息传递的标准API,它提供了在分布式环境中进行异步通信的能力。ActiveMQ 是...
camel-idea-plugin, Apache camel IntelliJ IDEA 插件 Apache camel IDEA插件 IntelliJ IDEA的插件,为代码编辑器提供一组 Apache camel 相关的功能。插件包括:Java,XML,属性或者yaml文件中驼峰终结点的代码完成...