java - Apache Camel 动态消费者

标签 java spring apache apache-camel

我创建了这条 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") 注释,但是一旦我创建消费者 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 出现在上面的异常中,所以我认为这一定是某种上下文范围问题,可能是我在 main 或 web Spring 上下文中创建这个 bean 但它不能可以通过 Camel 上下文访问,这可能吗?

最佳答案

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

关于java - Apache Camel 动态消费者,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31551005/

相关文章:

java - 当资源很大时,有没有办法在 Java HttpClient 调用期间不下载正文?

apache - 如何在Apache中使用setEnv变量?

java - Spring 启动 : "No qualifying bean of type... found" when autowiring concrete class

java - 将字符串解析为本地日期时间

java - 如何在jboss 7中部署用java 1.8编译的war

java - Guice 可以初始化 bean 吗?

spring - UserDetails getPassword 在 Spring Security 3.1 中返回 null。如何获取当前登录用户的密码?

spring - 当我在授权 header 中发送我的有效承载 token 时,为什么我没有通过我的 Spring-Cloud Gateway/OAuth2-Client 进行身份验证?

apache - 如何在 Apache HTTP 服务器上安装 Tomcat

java - 将值转换为十进制时遇到问题 JAVA (Android)