日期:2014-05-16  浏览次数:20881 次

Apache ServiceMix入门之四
上节,我们尝试了camel-ftp component和file component组成的2个路由,可以看到两个路由间接地通过“file:c:/inbox"这个endpoint,达到下载文件,然后再将文件移到另一文件夹的效果。下面,我们再来看几个其它Component的例子:

首先,我们先准备一下环境,先在console下运行:
karaf@root>log:clear


这个命令是将缓存中的日志清空。还有两个相关的命令:

log:display     显示最近的一些日志
log:tail            持续显示日志输出(对照一下linux/unix中的tail命令比较容易理解)

现在在camelContext下再加个route:
<route>
  <from uri="direct:abcd" />
  <log message="mylog:Message"/>
 </route>


在console下输入log:tail,应该看到没有输出或者输出一部分信息后,就没信息输出了,这时,我们要输入ctrl+c退出log:tail。

我们再用console命令:
karaf@root>feature:install camel-quartz

安装camel-quartz component,相信大家都知道quartz是什么了吧,不懂的,就去google一下。

然后,继续在camelContext下加多一个route:
<route>
  <from uri="quartz:mytimer?cron=0/10+*+*+*+*+?" />
  <to uri="direct:abcd"/>
 </route>

我们再次输入log:tail,就可以看到类似以下的输出:




每10秒钟就会输出一行包含“mylog:Message”的日志信息。

这是以上两个route合作产生的效果:

下面那个route的endpoint("quartz:mytimer?cron=0/10+*+*+*+*+?")每隔10秒产生一条Normal Message(NM),传递到endpoint("direct:abcd"), 然后,上面那个route的endpoint("direct:abcd")当有NM进入时,就会由<log message="xxxx">产生一条日志,所以我们就会每隔10秒就看到一条日志被输出。

在上面的例子中,我们可以看到“direct:abcd"就像一个标号一样,当有NM传递给它时,它并不处理,而是交到到由另一个有相同名字的direct endpoint为源的route那里处理。这里我表达得不好,大家自己体会一下。

最后,我们引入activemq的component,activemq是一个jms实现,也就是一个消息中间件,activemq component就是处理来自activemq的消息的组件。
<route>
  <from uri="quartz:timer2?cron=0/10+*+*+*+*+?" />
  <to uri="activemq:queue:q1"/>
 </route>

<route>
<from uri="activemq:queue:q1"/>
<to uri="log:q1logmessage"/>
 </route>

log:tail的输出如下:





除了以前的mylog:Message外,这次多了个内容为“Exchange[....."的日志。
<to uri="activemq:queue:q1"/>就是将NM转成ActiveMQ的消息,发到ActiveMQ的队列q1里。
<from uri="activemq:queue:q1"/>从ActiveMQ的队列q1里获取消息,并转成NM,传递给endpoint("log:q1logmessage")。

列举了以上几个例子,相信大家对ServiceMix的运作机制有了大致的认识了吧。

下节,我们举个可加入自定义业务逻辑的Bean Component的例子给大家参考。