apachecamel路由图对应的javaDSL:用来复制网站页面
优采云 发布时间: 2021-05-16 23:30apachecamel路由图对应的javaDSL:用来复制网站页面
apache骆驼用于复制网站页
我需要将一些客户的网站从其他地方迁移到我的诗歌在线网站建设系统中。由此,我已经与骆驼接触了近一个星期。这确实是一个宏伟的计划。首先看一下骆驼路由器。阿帕奇骆驼路线图
对应的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");
过程说明:
发送指令以从Psalm网站构建系统的后台复制页面,打包要复制的页面的参数,然后将其发送到activemq。接下来,它将由Apache骆驼处理,该骆驼在另一个VM中运行,并从网站构建系统中解构。骆驼从消息队列中获取消息,然后删除要克隆的页面。这是第一步,因为记录下来的页面收录许多img,css和javascript链接。这些链接是通过默认的克隆方法处理方法获得的,然后提交。当然,下一条路线还收录css中的img图像,必须对其进行额外处理。
先看看克隆的效果?这是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 relations = new ArrayList();
//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);
}