Wildfly 33部署MicroProfile+Kafka项目遇Emitter依赖缺失问题
问题描述
部署MicroProfile + Kafka示例项目到Wildfly 33/Java 17环境时,出现org.eclipse.microprofile.reactive.messaging.Emitter类找不到的部署异常。尝试两种部署方式均报错:
- 部署至使用
standalone-microprofile.xml配置的独立服务器 - 通过
wildfly-maven-plugin结合wildfly-ee-galleon-pack部署
项目配置详情如下:
Endpoint代码
@ApplicationScoped @Path("/kafka") public class KafkaEndpoint { private static final Logger LOG = LoggerFactory.getLogger(KafkaEndpoint.class); @Inject @Channel("to-kafka") private Emitter<String> em; @GET @Path("/test/{message}") public Response getTest(@PathParam("message") String message) { LOG.info("Starting rest..."); em.send(message); return Response.ok("Message sent").build(); } @Incoming("to-kafka") public void processMessage(String message) { LOG.info("Message received: {}", message); } }
配置文件(src/main/resources/META-INF/microprofile-config.properties)
mp.messaging.outgoing.to-kafka.connector=smallrye-kafka mp.messaging.outgoing.to-kafka.topic=my-topic mp.messaging.outgoing.to-kafka.bootstrap.servers=localhost:9092 mp.messaging.outgoing.to-kafka.value.serializer=org.apache.kafka.common.serialization.StringSerializer
父POM依赖管理
<dependencyManagement> <dependencies> <dependency> <groupId>org.wildfly.bom</groupId> <artifactId>wildfly-microprofile</artifactId> <version>33.0.2.Final</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement>
项目POM依赖
<dependencies> <dependency> <groupId>jakarta.enterprise</groupId> <artifactId>jakarta.enterprise.cdi-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>jakarta.ws.rs</groupId> <artifactId>jakarta.ws.rs-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.slf4j</groupId> <artifactId>slf4j-api</artifactId> <scope>provided</scope> </dependency> <dependency> <groupId>org.eclipse.microprofile.reactive.messaging</groupId> <artifactId>microprofile-reactive-messaging-api</artifactId> <scope>provided</scope> </dependency> </dependencies>
Maven插件配置
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <configuration> <addUser> <users> <user> <username>adm</username> <password>changeit</password> <realm>ManagementRealm</realm> </user> </users> </addUser> <filename>${project.build.finalName}.${project.packaging}</filename> <feature-packs> <feature-pack> <groupId>org.wildfly</groupId> <artifactId>wildfly-ee-galleon-pack</artifactId> </feature-pack> </feature-packs> <layers> <layer>jaxrs</layer> <layer>microprofile-reactive-messaging</layer> <layer>microprofile-reactive-messaging-kafka</layer> </layers> </configuration> </plugin>
解决方案
1. 确认独立服务器的Reactive Messaging模块已启用
检查standalone-microprofile.xml中是否包含以下扩展和子系统,缺失则手动添加后重启服务器:
<extensions> <extension module="org.wildfly.extension.microprofile.reactive-messaging-smallrye"/> <extension module="org.wildfly.extension.microprofile.reactive-messaging-kafka-smallrye"/> </extensions> <subsystems> <subsystem xmlns="urn:wildfly:microprofile-reactive-messaging-smallrye:1.0"/> <subsystem xmlns="urn:wildfly:microprofile-reactive-messaging-kafka-smallrye:1.0"/> </subsystems>
2. 修正Maven插件的版本一致性
明确指定插件和Feature Pack的版本,与Wildfly 33.0.2.Final保持一致,避免依赖冲突:
<plugin> <groupId>org.wildfly.plugins</groupId> <artifactId>wildfly-maven-plugin</artifactId> <version>33.0.2.Final</version> <configuration> <addUser> <users> <user> <username>adm</username> <password>changeit</password> <realm>ManagementRealm</realm> </user> </users> </addUser> <filename>${project.build.finalName}.${project.packaging}</filename> <feature-packs> <feature-pack> <groupId>org.wildfly</groupId> <artifactId>wildfly-ee-galleon-pack</artifactId> <version>33.0.2.Final</version> </feature-pack> </feature-packs> <layers> <layer>jaxrs</layer> <layer>microprofile-reactive-messaging</layer> <layer>microprofile-reactive-messaging-kafka</layer> </layers> </configuration> </plugin>
3. 清理并重新构建部署
执行Maven命令清理缓存、打包并部署:
mvn clean package wildfly:deploy
独立服务器部署时,删除standalone/deployments目录下的旧部署包和标记文件,再重新上传新包。
4. 验证Kafka服务可用性
确保本地Kafka服务已启动,localhost:9092可正常访问,避免因服务不可用导致的间接类加载异常。
内容的提问来源于stack exchange,提问作者ropogit
相关产品推荐
相关产品推荐

