首页 文章

Apache Camel动态消费者

提问于
浏览
4

我创建了这个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没有消费者,在这样的路线上发送消息显然工作正常 . 现在我想介绍一个新的消费者 after 已经初始化了路由,我认为可以通过编程方式创建一个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上下文访问,这可能吗?

1 回答

  • 0

    由于通过使用“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");
    

相关问题