在我们用dubbo调用服务时,可能会出现该错误。这个错误的原因是因为在注册中心找不到提供者。初学者可能会遇到这种错误。这种情况下是有消费者但是提供者没有注册成功。
首先查看提供者和消费者的情况,可以用命令来查看是否注册成功,我用的是zookeeper。打开bin下的zkCli.cmd文件
可以看见提供者没有注册成功,消费者注册成功了。
出现这种情况一般有一下几个可能
1.没有启动提供者服务或者忘记了写相关配置文件(或者消费者比提供者先启动)
这种情况很常见,也很容易解决,打开提供者服务或者写好配置文件重启就行了
2.在提供者的*ServiceImpl类中,@Service注解引用错误,检查引用的是不是spring框架的Service注解,把它改成alibaba.dobbo包下的注解。
3.配置文件错误:
在写ServiceImpl类时会涉及到事务的问题要加@Transactional注解,但是在加了这个注解后导致提供者无法发布,因为在加了注解后Spring会为此类基于动态代理技术创建代理对象,代理对象的完整类名为com.sun.proxy.$Proxy35,导致dubbo在进行包匹配时吗,没有成功。没有扫描到代理类对象。这时需要在xml配置文件中添加开启事务支持时proxy-target-class属性为true,作用是使用cglib类创建代理类对象
修改两个地方在xmll文件装配了事务管理器下加入
<tx:annotation-driven transaction-manager="transactionManager" proxy-target-class="true"/>
在*ServiceImpl的@Service注解后指定接口
@Service(interfaceClass = DictService.class)