spring-cloud-alibaba nacos1.2.1消费者启动后报错:找不到提供者

mm9b1k5b  于 4个月前  发布在  Spring
关注(0)|答案(7)|浏览(113)

消费者端代码:

@RestController
@RequestMapping("/demoapi")
public class DemoApi {
    @Reference
    DemoService demoService;

    @RequestMapping("/demo")
    public String demo(String msg){
        return demoService.returnMsg(msg);
    }
}

生产者端代码:

@Service
public class DemoServiceImpl implements DemoService {
    @Override
    public String returnMsg(String msg) {
        return "收到信息:"+msg;
    }
}

nacos页面显示已有服务:
服务名 | 分组名称 | 集群数目 | 实例数 | 健康实例数 | 触发保护阈值
providers:cn.haday.cloud.auth.service.DemoService:: | DEFAULT_GROUP | 1 | 1 | 1 | false

我先启动提供者,再启动消费者,然后消费者报错:

Caused by: java.lang.IllegalStateException: Failed to check the status of the service cn.haday.cloud.auth.service.DemoService. No provider available for the service cn.haday.cloud.auth.service.DemoService from the url nacos://localhost:8848/org.apache.dubbo.registry.RegistryService?application=auth-web&dubbo=2.0.2&init=false&interface=cn.haday.cloud.auth.service.DemoService&methods=returnMsg&pid=21252&qos.enable=false&register.ip=192.168.201.134&release=2.7.6&side=consumer&sticky=false&timestamp=1588907594859 to the consumer 192.168.201.134 use dubbo version 2.7.6
	at org.apache.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:349) ~[dubbo-2.7.6.jar:2.7.6]
	at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:258) ~[dubbo-2.7.6.jar:2.7.6]
	at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:158) ~[dubbo-2.7.6.jar:2.7.6]
	at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.getOrCreateProxy(ReferenceAnnotationBeanPostProcessor.java:274) ~[dubbo-2.7.6.jar:2.7.6]
	at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.doGetInjectedBean(ReferenceAnnotationBeanPostProcessor.java:143) ~[dubbo-2.7.6.jar:2.7.6]
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.getInjectedObject(AbstractAnnotationBeanPostProcessor.java:359) ~[spring-context-support-1.0.6.jar:na]
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor$AnnotatedFieldElement.inject(AbstractAnnotationBeanPostProcessor.java:539) ~[spring-context-support-1.0.6.jar:na]
	at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:130) ~[spring-beans-5.2.5.RELEASE.jar:5.2.5.RELEASE]
	at com.alibaba.spring.beans.factory.annotation.AbstractAnnotationBeanPostProcessor.postProcessPropertyValues(AbstractAnnotationBeanPostProcessor.java:142) ~[spring-context-support-1.0.6.jar:na]
	... 17 common frames omitted

如果把@reference加上check=false,然后先启动消费者,再启动生产者,就可以调用到。

谁可以帮忙解决下?

我改用zookeeper作为注册中心后,一切正常。

piv4azn7

piv4azn71#

我先启动提供者,再启动消费者,然后消费者报错:

确认是先启动的提供者,再启动的消费者吗?启动完提供者后,可以去nacos上面看下是不是有提供者注册上去了,正常情况下你这个顺序是不会有问题的

ncgqoxb0

ncgqoxb02#

我先启动提供者,再启动消费者,然后消费者报错:

确认是先启动的提供者,再启动的消费者吗?启动完提供者后,可以去nacos上面看下是不是有提供者注册上去了,正常情况下你这个顺序是不会有问题的

我确认是先启动提供者。另外,我尝试设置了check=false,这时,消费者可以起来,但是这时也还不能调用远程服务,需要提供者重启一下才可以。
我观察dubbo的缓存文件,消费者启动后,dubbo的缓存有如下内容:
cn.haday.cloud.auth.service.DemoService=empty\://192.168.201.134
提供者重启后,empty和后面的内容才变成正确的地址。

搞了一天还是不行后,我今天改用zookeeper,仅仅换了注册地址和依赖的包,然后在check=true的情况下,先启动提供者,再启动消费者,双双启动成功,能够正常调用。
因此,我怀疑nacos版本的存在一些问题。

y53ybaqx

y53ybaqx3#

你这个问题我也遇到了,暂时没什么好办法,每次只能先启动消费者,再启动提供者

tcomlyy6

tcomlyy65#

你这个问题解决了吗?

72qzrwbm

72qzrwbm6#

nacos1.3.0 遇到了同样的问题

jucafojl

jucafojl7#

你这个问题我也遇到了,暂时没什么好办法,每次只能先启动消费者,再启动提供者

还是不行,感觉掉坑里面了

相关问题