Quarkus环境下调用Jar包内Apache Camel路由遇无可用消费者异常
解决Quarkus Camel跨应用调用路由出现“No consumers available on endpoint”的问题
问题原因
你遇到的问题核心是:App A里定义的direct:startappa路由没有被加载到App B的Camel上下文里。direct是Camel的本地端点,只能在同一个Camel上下文内找到对应的消费者,App B调用时找不到这个端点的消费者,就会抛出异常。
解决步骤
1. 给App A的RouteBuilder添加Quarkus Bean注解
App A的路由类必须被Quarkus识别为Bean,才能在App B依赖时被自动加载。修改App A的路由代码,加上@ApplicationScoped注解:
import jakarta.enterprise.context.ApplicationScoped; import org.apache.camel.builder.RouteBuilder; @ApplicationScoped public class AppARoute extends RouteBuilder { @Override public void configure() { from("direct:startappa") .log("app a started"); } }
2. 确保App A的打包包含Quarkus元数据
用Quarkus官方的打包命令quarkus build生成jar,这样打包出来的文件会包含Quarkus需要的Bean索引信息,App B依赖时才能正确发现App A里的路由Bean。
3. 检查App B的依赖配置
确认App B的pom.xml里正确引入了App A的依赖,坐标要和你发布到Maven仓库的一致:
<dependency> <groupId>你的GroupId</groupId> <artifactId>app-a</artifactId> <version>你的版本号</version> </dependency>
4. 验证路由是否被加载
启动App B时,查看日志,搜索App A路由类的名称(比如AppARoute),如果看到类似Adding route from direct:startappa的日志,说明路由已经被成功加载到App B的Camel上下文里,此时再调用就不会报错了。
内容的提问来源于stack exchange,提问作者Vir
相关产品推荐
相关产品推荐

