欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

异常处理com.alibaba.dubbo.rpc.RpcException: No provider available from registry 127.0.0.1:2181 for

程序员文章站 2022-07-15 14:30:58
...

启动了dubbo,并且服务已经正常运行,却在dubbo里找不到对应的服务!

com.alibaba.dubbo.rpc.RpcException: No provider available from registry 127.0.0.1:2181 for service com.xxx.xxx.user.facade.service.xxx on consumer 192.168.xxx.xx use dubbo version 2.6.0, may be providers disabled or not registered ?
今天进行dubbo调用的时候遇到上面的服务找不到问题。定位到这个报错的注册类,发现问题出在注解上面。
@Service
public class XxxImpl implements Xxx{
...

出现该问题的先决条件

[email protected] 没有指明接口的字节码:@Service(interfaceClass = Xxx.class)。
2.在1的情况下该实现类里的一些方法添加了@Transactional注解。

图片: 异常处理com.alibaba.dubbo.rpc.RpcException: No provider available from registry 127.0.0.1:2181 for
满足这两个条件后,该接口本来该注册到dubbo上的,却注册成了org.springframework.aop.SpringProxy代理类。所以调用服务时候就会提示may be providers disabled or not registered ?找不到的原因在这里。

解决方法

1.第一种去掉@Transactional注解。这样操作并不好,因为这个注解我们经常会用到,并且有着重要的作用。
2.第二种@Service 指明接口类的字节码:@Service(interfaceClass = Xxx.class)。这才是规范的接口声明方式。并且不会和@Transactional注解冲突而导致注册org.springframework.aop.SpringProxy代理类。
@Service(interfaceClass = Xxx.class)
public class XxxImpl implements Xxx{
...

总结 使用规范的接口定义,指定清楚接口类的字节码,这才是最好的方式!

相关标签: java zookeeper