我使用的是akka-camel 2.2.1,需要分别配置路由器和消费者和 生产环境 者角色 . 我目前正在定义路由并将它们添加到CamelExtension中的内部Camel上下文中,如下所示:

camel.context.addRoutes(new RouteBuilder { 
    def configure() = {
      from("file:/tmp?include=whatever.*.log&noop=true&sendEmptyMessageWhenIdle=true")
        .split(body(classOf[String]).tokenize("\n"))
        .streaming()
        .to("seda:input-route")

      from("seda:update-route")
        .to("bean:db-update-bean?method=process")
  }})

我有一个扩展Consumer的Actor,它通过endPointUri读取“seda:input-route”,另一个扩展Producer的Actor写入“seda:update-route” . Spring applicationContext.xml中定义的“db-update-bean”如下所示:

<bean id="db-update-bean" class="nz.co.whatever.DBUpdate">
    <constructor-arg ref="jdbcTemplate"/>
    <constructor-arg value="some_other_constructor_arg"/>
</bean>

Spring上下文被加载并在由akka.Main启动的主管Actor中启动 . 然而(并且可以理解),Camel并不知道这个Spring上下文,因此不遗余力地告诉我,它不知道“db-update-bean”是什么:

2013-10-11 08:55:09,614 [SedaConsumer] WARN处理交换时出错 . 交换[消息:1378642997698,27684,真实,57.000000,0.750000,97] . 引起:[org.apache.camel.NoSuchBeanException - 在注册表中找不到bean:db-update-bean]

当然,我可以通过编程方式将组件添加到akka提供的CamelContext中,或者执行以下操作:

from("seda:update-route")
      .bean(new DBUpdate(jdbcTemplate, "gps_temp_status"), "process")

但我宁愿用Spring来定义bean . 显然,CamelExtension需要使用Spring定义的CamelContext,而不是创建自己的CamelContext .

此外,更重要的是,我想将Camel路由的定义外部化到 <CamelContext/> 标记内的相同applicationContext.xml中 . 根据https://weblogs.java.net/blog/manningpubs/archive/2013/02/13/akka-and-camel之类的文章,似乎这样做的方法是实例化"camel-service" bean并注入Spring定义的CamelContext,如下所示:

<camel:camelContext id="camelContext">   
</camel:camelContext>

<akka:camel-service id="camelService">                             
    <akka:camel-context ref="camelContext" />
</akka:camel-service>

这是车轮脱落的地方 . 根据Roland Kuhn在Why spring integration doc for akka exists only for 1.3.1 but not for next versions中的回复,akka-spring库未包含在Akka 2.2.1中,因此没有针对akka的Spring命名空间处理程序,我无法实例化这个camel-service bean . 虽然不是因为缺乏尝试 . 或者诅咒 .

所以(最后),问题是:如何定义Spring XML中的Camel路由,其 endpoints 可以由使用akka-camel 2.2.1而不使用akka-spring的Consumer或Producer Actors使用?是否有人实例化一个Factory bean,它生成一个注入了CamelContext的CamelService或其他一些这样的巫术?其次(但相关)如果我被迫通过RouteBuilder定义它们,如何使用Spring来实例化在camel路由中引用的bean?

提前致谢 .