首页 > 解决方案 > 如何处理 ActiveMQ 消费者 Camel 路由的 from() 以进行容器内测试?

问题描述

我正在尝试使用 Arquillian 在 WildFly 11 中运行我的 Java Camel 路由的 JUnit 测试。

问题是,路由(扩展了 RouteBuilder)在初始化(或预热?)时就开始轮询 MQ 代理,也就是说,早在我的测试代码有机会运行和模拟 from("activemq :queue:myqueue") 的路线。然后它当然挂在那里,因为它尝试(骆驼硬编码)默认的 61616 端口。

我也尝试扩展 DefaultCamelContext 但是如果我 @Observe CdiCamelConfiguration 并设置 autoConfigureRoutes(false) 并且虽然错误的轮询不再发生(耶),CDI 也不再发生并且所有注入的东西都是空的(buuh)稍后我在测试类中手动加载路线。

@ApplicationScoped
class MyCamelContext extends DefaultCamelContext {
    @PostConstruct
    void manual() throws IOException {
        setAutoStartup(false); // cool but doesn't help as camel 
                 // dows the warmup anyway, so activemq will poll
    }

    static void configuration(@Observes
    final CdiCamelConfiguration configuration) {
        configuration.autoConfigureRoutes(false); // cool but breaks CDI
    }
}

显然,在测试用例或测试套件中我无能为力(它们甚至会在以后运行)。我可以(重新)使用 from("direct:blah") 定义路线,但我想保持路线代码不变。同样定义不自动启动的路由也无济于事,因为一旦创建了 RouteBuilder bean,activemq 就会开始轮询。

我曾想过使用 shrinkwrap 存档也部署一个 queue-jms.xml,但我不知道我可以放什么来挽救这种情况。或者以某种方式覆盖 brokerURL 但我找不到任何方法。

但是,如何在没有任何尝试轮询任何内容的情况下初始化路由 bean?

版本:WildFly 11 中的 Camel 2.21.0 - 实际上是 JBoss EAP 7.1.5 和 Fuse 7.2。

标签: javajunitapache-camelactivemqjboss-arquillian

解决方案


推荐阅读