[英]Apache Camel Dynamic Consumers
我创建了这个Camel路线
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:printQueue没有消费者,在这样的路线中发送消息显然工作正常。 现在我想在路由初始化之后引入一个新的消费者,我认为可以用编程方式创建一个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]
有什么想法吗?
[UPDATE]
我已经将错误追溯到创建这个新消费者的类,我正在实例化PrintQueue
类,然后使用AutowireCapableBeanFactory
将它集成到Spring上下文中,执行factory.autowireBean(printQueueInstance)
然后是factory.initializeBean(printQueueInstance, id)
其中id
是4965d710-b5c7-41cf-97e9-a42bdfcea894
,它出现在上面的异常中,所以我认为这必须是某种上下文范围问题,可能是我在main或web Spring上创建这个bean并且它无法通过Camel上下文访问,这可能吗?
由于通过使用“direct:”组件同步调用此路由,因此对于另一个bean的异步调用似乎不需要“seda:”。 在这种情况下,使用Camel的bean方法为Java DSL调用bean似乎最简单。 作为Camel 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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.