Apache Camel路由报错:等待依赖[(&(component=Simple)(objectClass=org.apache.camel.spi.ComponentResolver))]
我之前在Karaf环境下也碰到过这个一模一样的问题!明明camel-core已经激活,却还是报Waiting for dependencies [(&(component=Simple)(objectClass=org.apache.camel.spi.ComponentResolver))]的错误,给你几个实用的排查和解决方向:
检查版本一致性
有时候项目pom.xml里依赖的Camel版本和Karaf容器中已安装的camel-core版本不匹配,会导致组件解析异常。你可以在Karaf控制台执行list | grep camel-core查看容器内的版本,再对比项目依赖版本。如果不一致,要么统一项目的Camel版本,要么在Karaf中安装对应版本的camel-core(用feature:install camel-core/<版本号>)。重新激活camel-core组件
即便Karaf显示camel-core已激活,OSGi环境下偶尔会出现服务绑定不彻底的情况。你可以尝试在控制台执行feature:install camel-core(重新安装一次特性),或者找到camel-core的Bundle ID,执行bundle:restart <Bundle ID>重启组件,这往往能修复服务注册的问题。验证ComponentResolver服务状态
报错里提到的org.apache.camel.spi.ComponentResolver是OSGi核心服务,你可以在Karaf控制台执行service:list org.apache.camel.spi.ComponentResolver,查看是否有对应Simple组件的解析器注册。如果列表里没有Simple相关的条目,说明camel-core的服务注册失败,大概率需要重启容器或者重新安装Camel特性。调整路由初始化时机
如果你的路由是在Bundle启动时立即初始化的,可能此时ComponentResolver服务还未完全就绪。可以尝试通过OSGi的依赖注解(比如@Reference)延迟路由创建,确保在Simple组件的解析器服务可用后再初始化路由;或者在路由配置中添加延迟启动的逻辑。
内容的提问来源于stack exchange,提问作者Erick Roseira

