我已经创建了这些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,并使用@Consume(uri="seda:printQueue")
注释让Camel拾取该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)
,其中id
是上面异常中出现的4965d710-b5c7-41cf-97e9-a42bdfcea894
,所以我认为这可能是一些上下文范围的问题,也许我在主或Web Spring上下文中创建了此bean,无法被Camel上下文访问,这可能吗?
@Consume
bean 的?它是否进入了注册表?有没有理由在运行时创建它,而不是提前配置它? - bdeniker