无法找到外部自定义模块中的Camel路由,direct端点无可用消费者
解决Apache Camel中
direct://event-persist无可用消费者的问题 针对你遇到的Camel路由调用direct://event-persist时报错No consumers available on endpoint: direct://event-persist的问题,以下是几个核心排查和解决方向:
1. 修正Direct端点的URI格式
Apache Camel的Direct组件标准URI格式是direct:端点名称,而非direct://端点名称(后者是HTTP类组件的格式)。如果同事的外部模块中定义的消费者是direct:event-persist,而你这边用了direct://event-persist,两者会被识别为完全不同的端点,自然找不到消费者。
修正你的路由代码:
from("direct://user-logged") .routeId("user-event-tracker") .tracing() .log(String.valueOf(PAYLOAD)) .process(new TriggerUserActionProcessor()) .process(new AuditUserAction(USER_ACTION, PAYLOAD)) .to("direct:event-persist") // 去掉多余的斜杠,匹配标准格式 .end();
2. 确认外部模块的消费者路由已正确加载
- 检查同事的
user-event-persist模块中,是否存在以from("direct:event-persist")开头的路由定义,且该路由已被注册到Camel上下文。 - 如果是Spring环境,确保路由类带有
@Component注解;如果是纯Java配置,需通过CamelContext.addRoutes()手动将路由添加到上下文。
3. 排查Camel上下文的初始化顺序
如果你的SPI模块路由先启动,而外部模块的event-persist路由后完成初始化,就会出现调用时消费者未就绪的情况:
- Spring环境下可使用
@DependsOn注解指定你的路由类依赖外部模块的路由组件,确保加载顺序。 - 手动管理CamelContext时,先启动外部模块对应的上下文,再启动你的SPI路由上下文。
4. 验证依赖与类加载正确性
- 执行
mvn dependency:tree命令,确认user-event-persist依赖已正确引入到你的项目中,scope为compile而非provided或test。 - 由于是Keycloak SPI模块,需确保外部模块的类能被Keycloak的类加载器扫描到:要么将外部模块打包到你的SPI fat jar中(用maven-shade-plugin),要么将
user-event-persist.jar放置到Keycloak的providers目录下。
内容的提问来源于stack exchange,提问作者CIN SOFT
相关产品推荐
相关产品推荐

