Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/401.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 无法在apache camel中测试死信通道_Java_Apache Camel - Fatal编程技术网

Java 无法在apache camel中测试死信通道

Java 无法在apache camel中测试死信通道,java,apache-camel,Java,Apache Camel,我正试图在apache camel中测试死信Chanel 以下是生产代码片段(我的RouterBuilder的一部分): 下面是测试代码: @测试 void TesterRorcaseofDataRoute_shouldGoToDataLexChange()引发异常{ //鉴于: MockEndpoint dateDLExchangeMock=camelContext.getEndpoint(“mock:test”,MockEndpoint.class); AdviceWith.AdviceWi

我正试图在apache camel中测试死信Chanel

以下是生产代码片段(我的RouterBuilder的一部分):

下面是测试代码:

@测试
void TesterRorcaseofDataRoute_shouldGoToDataLexChange()引发异常{
//鉴于:
MockEndpoint dateDLExchangeMock=camelContext.getEndpoint(“mock:test”,MockEndpoint.class);
AdviceWith.AdviceWith(camelContext,路线日期,
in->in.interceptSendToEndpoint(dateDLExchange()).to(dateDLExchangeMock)
);
dateDLExchangeMock.expectedMessageCount(1);
dateDLExchangeMock.expectedBodiesReceived(“无效日期”);
//当:
producerTemplate.sendBody(dateExchange(),“无效日期”);
//然后:
dateDLExchangeMock.assertessatified();
}
断言失败了

但是,如果我将mock更改为intercept
dlqDirect()
(直接端点),而不是
dateDLExchange()
rabbitmq
端点),它工作正常,但我也希望在测试中包含
choice()
函数

我正在TestContainer中使用RabbitMQ进行小型集成测试,因此我真的认为应该在
RabbitMQ
实例中侦听队列并在那里断言消息,而不是使用Camel进行测试!(骆驼能帮忙吗?)

值得注意的是,当我手动测试这个案例时,我将无效消息放入绑定到
date\u dl\u交换的rabbitmq
date\u dl\u队列
。(我的意思是,它是有效的)


我通过使用路由作用域
errorHandler
解决了这个问题,而不是对所有路由使用通用错误处理程序,然后使用when表达式

因此,代码更改为如下所示:

from(dateQueue())
.routeId(路线日期)
.errorHandler(buildErrorHandler(dateDLExchange()))//
from(dateQueue())
        .routeId(ROUTE_DATE)
        .to(log(myConsumer))
        .transform().body(String.class, it -> myConsumer.consume(LocalDate.parse(it)))
        .split(body())
        .to(log(myConsumer))
        .marshal().json()
        .to(processorExchange());

errorHandler(deadLetterChannel(dlqDirect()));

// @formatter:off
from(dlqDirect())
        .to("log:dlq")
        .choice()
            .when(it -> ROUTE_DATE.equals(it.getFromRouteId())).to(dateDLExchange())
            // other when expressions here 
        .end();
// @formatter:on