2015-07-21 43 views
4

我创造了这个骆驼的路线Apache的骆驼充满活力的消费者

from("direct:pageExtraction") 
      .bean(PageManager.class, "setProperties(*, ${headers})") 
      .filter().method(PageManager.class, "exists").to("seda:pagePostProcessing").end() 
      .to("seda:pageImposition"); 

      from("seda:pagePostProcessing") 
      .bean(PageManager.class, "extractThumbnail(*, ${headers})") 
      .bean(PageManager.class, "extractCMYKSeparation(*, ${headers})") 
      .bean(PageManager.class, "persist(*, ${headers})") 
      .bean(PageManager.class, "cleanUp(${headers})") 
      .to("seda:pageImposition"); 

      from("seda:pageImposition") 
      .bean(PageManager.class, "extractImposition(*, ${headers})") 
      .to("seda:printQueue"); 

在年底,SEDA:打印队列没有消费者,在路由发送类似这样的消息显然是工作正常。现在我想在之后引入一个新的消费者这些路由已经初始化了,我认为可以通过编程的方式创建一个Spring bean,让Camel使用@Consume(uri="seda:printQueue")注释来获取这个bean,但是一旦创建消费者Camel抱怨

org.apache.camel.RuntimeCamelException: org.springframework.beans.factory.NoSuchBeanDefinitionException: No bean named '4965d710-b5c7-41cf-97e9-a42bdfcea894' is defined] 

有什么想法?

[更新]

我已经追溯到了错误的地方创建这个新的消费,我实例化PrintQueue类,然后使用AutowireCapableBeanFactory把它集成到Spring上下文做factory.autowireBean(printQueueInstance)类其次是factory.initializeBean(printQueueInstance, id)其中id4965d710-b5c7-41cf-97e9-a42bdfcea894出现在上面的异常中,所以我认为这必须是某种上下文范围的问题,可能是我在主或Web Spring上下文中创建了这个bean,并且它无法访问在骆驼环境下,这可能吗?

+0

你是如何创建'@ Consume'-ING豆?它会进入注册表吗?是否有任何理由在运行时创建它,而不是事先配置它? – bdeniker

回答

0

由于此路由是通过使用“direct:”组件同步调用的,因此它不需要“seda:”来异步调用另一个bean。在这种情况下,使用Camel的bean方法为Java DSL调用一个bean似乎是最简单的。截至骆驼豆文档中所示的例子:

http://camel.apache.org/bean.html

我只想做:

// Send message to the bean endpoint 
// and invoke given method. 
from("direct:start") 
    // do other stuff in your route 
    .beanRef("beanName", "methodName");