当前位置: 首页 > 知识库问答 >
问题:

Apache Camel Dynamic Consumers

邵城
2023-03-14

我创建了这条骆驼路线

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使用@Con的(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上下文中,创建一个工厂。autowireBean(printQueueInstance)后跟工厂。initializeBean(printQueueInstance,id)其中id是上面异常中出现的4965d710-b5c7-41cf-97e9-a42bdfca894,所以我认为这一定是某种上下文范围问题,可能是我在main或webSpring上下文中创建这个bean,Camel上下文无法访问它,这是可能的吗?

共有1个答案

束福
2023-03-14

由于此路由是通过使用“direct:”组件同步调用的,因此它似乎不需要“seda:”来异步调用另一个bean。在这种情况下,使用 Java DSL 的 Camel's bean 方法调用 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");
 类似资料:

相关问答

相关文章

相关阅读