Java 无法在apache camel中测试死信通道
我正试图在apache camel中测试死信Chanel 以下是生产代码片段(我的RouterBuilder的一部分): 下面是测试代码: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
@测试
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更改为interceptdlqDirect()
(直接端点),而不是dateDLExchange()
(rabbitmq
端点),它工作正常,但我也希望在测试中包含choice()
函数
我正在TestContainer中使用RabbitMQ进行小型集成测试,因此我真的认为应该在RabbitMQ
实例中侦听队列并在那里断言消息,而不是使用Camel进行测试!(骆驼能帮忙吗?)
值得注意的是,当我手动测试这个案例时,我将无效消息放入绑定到date\u dl\u交换的rabbitmqdate\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