Quarkus升级后无法访问KafkaConsumer类,咨询其迁移位置
Quarkus 3.2.10.Final中Vert.x KafkaConsumer的迁移问题
问题背景
将运行于2.14.3.Final版本的Quarkus应用升级至3.2.10.Final版本后,原代码中手动实例化Vert.x KafkaConsumer时出现类无法访问的错误:
原实例化代码:
io.vertx.kafka.client.consumer.KafkaConsumer.create<String, String>( vertx, mapOf( ConsumerConfig.BOOTSTRAP_SERVERS_CONFIG to kafkaServers, ConsumerConfig.GROUP_ID_CONFIG to "test_group", ConsumerConfig.AUTO_OFFSET_RESET_CONFIG to "earliest", ConsumerConfig.ENABLE_AUTO_COMMIT_CONFIG to false.toString(), AbstractKafkaSchemaSerDeConfig.AUTO_REGISTER_SCHEMAS to true.toString(), AbstractKafkaSchemaSerDeConfig.SCHEMA_REFLECTION_CONFIG to false.toString(), AbstractKafkaSchemaSerDeConfig.SCHEMA_REGISTRY_URL_CONFIG to schemaRegistryUrl, AbstractKafkaSchemaSerDeConfig.VALUE_SUBJECT_NAME_STRATEGY to TopicNameStrategy::class.java.canonicalName, ConsumerConfig.KEY_DESERIALIZER_CLASS_CONFIG to StringDeserializer::class.java.canonicalName, ConsumerConfig.VALUE_DESERIALIZER_CLASS_CONFIG to KafkaAvroDeserializer::class.java.canonicalName, KafkaAvroDeserializerConfig.SPECIFIC_AVRO_READER_CONFIG to true.toString(), ) )
报错信息:
Cannot access class 'io.vertx.kafka.client.consumer.KafkaConsumer'. Check your module classpath for missing or conflicting dependencies
同时发现部分序列化类(如io.vertx.kafka.client.serialization.JsonObjectDeserializer)已迁移至io.quarkus.kafka.client.serialization.JsonObjectDeserializer,咨询KafkaConsumer的迁移位置。
解决方案
- Vert.x KafkaConsumer并未迁移包路径:
io.vertx.kafka.client.consumer.KafkaConsumer仍保留在原Vert.x包中,类路径未发生变化。 - 依赖引入方式调整:Quarkus 3.x升级了Vert.x版本,且要求通过官方扩展引入Vert.x Kafka相关依赖,需确保项目中引入
quarkus-vertx-kafka扩展,而非直接引入Vert.x原生的kafka客户端依赖。- Maven依赖示例:
<dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-vertx-kafka</artifactId> </dependency> - Gradle依赖示例:
implementation 'io.quarkus:quarkus-vertx-kafka'
- Maven依赖示例:
- 推荐使用Quarkus原生Kafka集成:Quarkus 3.x更推荐基于SmallRye Reactive Messaging的原生Kafka消费方式,通过
@Incoming注解即可实现消息消费,无需手动实例化KafkaConsumer,这种方式能更好地适配Quarkus的原生特性(如原生镜像构建、依赖注入等)。 - 类路径冲突排查:若引入扩展后仍报错,需检查项目中是否存在旧版Vert.x Kafka依赖或其他冲突依赖,可通过依赖分析工具(如Maven的
dependency:tree)排查并排除冲突依赖。
内容的提问来源于stack exchange,提问作者PaoloAgVa
相关产品推荐
相关产品推荐

