dubbo服务配置常见问题(微服务之前相互调用)
今天启动项目时发现以下报错 看Caused by(原因):
org.springframework.beans.factory.NoSuchBeanDefinitionException: No qualifying bean of type [com.cfae.nyh.basic.service.IDataDictionaryService] found for dependency [com.cfae.nyh.basic.service.IDataDictionaryService]: expected at least 1 bean which qualifies as autowire candidate for this dependency. Dependency annotations: {@org.springframework.beans.factory.annotation.Autowired(required=true)}
我们仔细看这个报错No qualifying bean of type xxxxx 指的时注册中心没有注册到这个service,通过svn提交发现
他在最新的地方引入了IDataDictionaryService 这个service 但是没有注册到。
我们最终排查到是double微服务互相调用的时候 需要在double.xml里引用你所需要的servcie类
给大家看下项目目录。
我们明显看到他是在ukey模块引用,但是发现这个service是在另一个子模块basic的service
解决方案
在double项目中你在子模块调用其他子模块的service时需要在double.xml配置
<dubbo:reference interface="" id="" check="" registry=""/>
SmartyPants将ASCII标点字符转换为“智能”印刷标点HTML实体。例如:
标签 | 用途 | 解释 |
---|---|---|
dubbo:service | 服务配置 | 用于暴露一个服务,定义服务的元信息,一个服务可以用多个协议暴露,一个服务也可以注册到多个注册中心 |
dubbo:reference | 引用配置 | 用于创建一个远程服务代理,一个引用可以指向多个注册中心 |
当然还有很多 通俗理解 doubbo:service 自己内部service 暴露出来 可以多方调用。
dubbo:reference:在两个微服务中,你需要调用另一个微服务的service去实现你的业务逻辑,需要用到这个标签
总结:
Dubbo一个分布式、高性能、透明化的RPC服务框架,提供服务自动注册、自动发现等高效服务治理方案,在写Dubbo微服务系列需要注意服务者和调用者的配置问题。