Apache camel测试失败:无法刷新目标“null”的JMS连接 - 在5000毫秒内重试。原因:null

时间:2015-07-13 14:00:47

标签: java spring unit-testing apache-camel activemq

我有这个非常烦人的问题,我已经开发并测试了一个Apache Camel模块用于更大的应用程序,一切看起来很棒,直到我将代码提交到主存储库并且Jenkins尝试构建并运行我的测试。

本地(在我的Windows机器上)maven构建并运行一切正常但是在我们的jenkins服务器(linux)上它会因错误而每次测试失败。

Could not refresh JMS Connection for destination 'null' - retrying in 5000ms. cause: null

应用程序非常简单,它接受来自一个队列的消息,然后进行一些验证和转换,并将其发送到另一个队列。

在我的机器上,所有模拟的端点都可以使用预期值进行断言,而在我们的jenkins服务器上,这些模拟的端点断言在10秒后会超时。这不是工作负载问题,因为测试数据在我的机器上以毫秒为单位进行处理。我还可以看到我希望发生的一切都发生在我们的日志中。

该应用程序基于Spring 3.2.14构建,它使用Apache Camel 2.15.2,并且出于测试目的,我正在使用ActiveMQ 5.11.1。我确保每个框架只有一个版本,所以不应该有任何冲突 (用mvn依赖:树检查)

我很可能不允许显示任何代码,所以现在我将在没有它的情况下发布此帖子。

非常感谢任何可能是原因的建议。

EDIT1:

这是骆驼路线(简化):

// camel route A  : entry point
@Inject
private Queue queueInn;

@Override
public void configure() throws Exception {
from("jms:queue:" + queueInn.getName()))
    .routeId(ROUTE_NAME)
    .multicast()
        // TODO add additional routes add them to the parameter list to(queueA, queueB, .....)
    .to(QueueA.IN_QUEUE)
.end();
}

// camel route B: basic logic
@Override public void configure() throws Exception {

from(IN_QUEUE)
    .routeId(ROUTE_NAME)
    .process(new MDCContextProcessor())

        //Error handling
    .onException(Throwable.class)
        .setBody(exchangeProperty(CommonProperties.ORIGINAL_MESSAGE))
        .log(LoggingLevel.ERROR, LOG, "... \n${exception.message} \n${exception.stacktrace}")
        .to(QueueUtil.getCamelQueue(errorQueue))
        .log(LoggingLevel.ERROR, LOG, "...")
        .stop()
    .end()

        // processing
    .log(LoggingLevel.DEBUG, LOG, "...")
    .setProperty(CommonProperties.ORIGINAL_MESSAGE, body())
     .to("validator:" + XSD_A)
    .unmarshal(jaxbFormatA)

    .choice()
        .when(predicateA)
        .log(LoggingLevel.DEBUG, LOG, "...")
        .process(mapperA)
        .marshal(jaxbFormatB)
        .convertBodyTo(String.class)
        .to("validator:" + XSD_B)
        .to("jms:queue:" + queueOut.getName())
    .log(LoggingLevel.DEBUG, LOG, "...")
    .otherwise()
        .log(LoggingLevel.DEBUG, LOG, "...")
    .endChoice();

}

更新2:

经过大量的调试和测试后,我们得出结论,我们的问题与我们的Camel测试上下文有关,当没有其他测试运行时,我们的驼峰测试运行正常,但是如果我们有其他Spring测试使用相同的配置正如我们的Camel测试一样,模拟的端点开始表现得很奇怪。然而,只有在我们的骆驼测试之前执行正常的Spring测试时才会出现这种情况。如果我们的骆驼测试是第一次运行,它们工作得很好。这是我们的本地构建和CI服务器之间的区别以及我们问题的原因。

更新3: 我现在暂时解决了我的问题,我在使用我的测试上下文的所有其他测试中使用@DirtiesContext。虽然这有效,但我希望能够告诉我的骆驼测试类,它需要在开始运行测试之前创建一个新的上下文,有谁知道我会怎么做?

0 个答案:

没有答案