You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行含Reactive Messaging的Quarkus测试时遇No CDI container异常

Quarkus AMQP 测试异常:无CDI容器且消费方法未触发

问题详情

  • 项目场景:基于quarkus-messaging-amqp搭建极简项目,包含:
    • 标注@Incoming("executor-in")的消费者方法,用于接收并记录Executor对象
    • 自定义MessageConverter实现类,负责将JSON字符串转换为Executor对象
  • 测试问题:在IntelliJ中运行JUnit 5测试,发送序列化后的Executor对象时:
    • 抛出java.lang.IllegalStateException: No CDI container is available异常
    • 测试可执行,但消费者方法从未被调用
  • 对比现象:若MessageConverter不做JSON转换,直接转发携带JSON负载的Message<?>,同时将消费方法参数改为String,则测试完全正常

解决方案

1. 确保自定义MessageConverter被CDI托管

自定义转换器类必须添加CDI作用域注解(如@ApplicationScoped),让Quarkus容器能识别并管理它,否则测试环境无法获取容器上下文:

@ApplicationScoped
public class ExecutorMessageConverter implements MessageConverter {
    // 实现JSON转Executor的逻辑
}

2. 为测试类添加Quarkus测试注解

测试类需要标注@QuarkusTest,该注解会启动Quarkus的CDI容器及运行时环境,为消息组件提供必要的上下文支持:

@QuarkusTest
public class AmqpMessagingTest {
    // 测试代码
}

3. 检查转换器的依赖注入

如果MessageConverter中用到了其他CDI bean(比如ObjectMapper),必须通过CDI注入获取,避免手动实例化依赖类,确保测试环境中依赖能正常被容器提供。

4. 验证消息的Content-Type头

发送测试消息时,需将content-type头设置为application/json,确保Quarkus消息框架能正确触发自定义转换器进行类型转换。

内容的提问来源于stack exchange,提问作者joe_specimen

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.17 08:52:09