Quarkus集成Apache Camel AWS Lambda时CDI注入ProducerTemplate空指针问题
空指针异常原因
AWS Lambda运行时默认会自行实例化你指定的RequestHandler实现类,该实例化过程不经过Quarkus的CDI托管上下文,因此类内标记的@Inject注解不会被CDI容器识别处理,ProducerTemplate自然不会被注入,最终得到null值。
解决方案
- 优先使用Quarkus官方Lambda集成方案
- 确保项目引入
io.quarkus:quarkus-amazon-lambda依赖 - 在
application.properties中配置quarkus.lambda.handler=languageScoreLambda,指定你定义的Bean名称 - 给
LanguageScoreLambda类添加@ApplicationScoped注解,明确声明为CDI托管Bean - Lambda控制台配置的Handler入口改为Quarkus提供的统一入口
io.quarkus.amazon.lambda.runtime.QuarkusStreamHandler,不要直接指向你自己写的LanguageScoreLambda类。Quarkus的统一入口会从CDI容器中获取你定义的Handler实例,此时@Inject的ProducerTemplate会被正确注入。
- 确保项目引入
- 临时兼容方案
如果不想修改现有Handler入口配置,可以去掉@Inject注解,在需要使用ProducerTemplate的位置手动从CDI容器获取实例,代码示例:ProducerTemplate template = CDI.current().select(ProducerTemplate.class).get(); - 依赖校验
确认项目已经引入org.apache.camel.quarkus:camel-quarkus-core依赖,该扩展会自动向CDI容器注册ProducerTemplate的生产逻辑,否则即使CDI上下文正常也无法注入ProducerTemplate实例。
内容的提问来源于stack exchange,提问作者user902870
相关产品推荐
相关产品推荐

