设为首页 收藏本站
查看: 779|回复: 0

[经验分享] apache camel 用来复制网站页面

[复制链接]

尚未签到

发表于 2017-1-7 06:43:39 | 显示全部楼层 |阅读模式
我需要将一些客户的网站从其它地方迁移到我的诗篇在线建站系统中去,由此开始了将近一个星期的与camel的接触,确实是一个宏大的程序。先看一张camel的router。apache camel 路由图
http://demo.m3958.com/pageclone.png
对应的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);
}

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-324803-1-1.html 上篇帖子: Tomacat7启动报错-org.apache.catalina.deploy.WebXml addFilter 下篇帖子: 在Apache Felix中运行bundle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表