消费者端代码:
@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®ister.ip=192.168.201.134&release=2.7.6&side=consumer&sticky=false×tamp=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作为注册中心后,一切正常。
7条答案
按热度按时间piv4azn71#
我先启动提供者,再启动消费者,然后消费者报错:
确认是先启动的提供者,再启动的消费者吗?启动完提供者后,可以去nacos上面看下是不是有提供者注册上去了,正常情况下你这个顺序是不会有问题的
ncgqoxb02#
我先启动提供者,再启动消费者,然后消费者报错:
确认是先启动的提供者,再启动的消费者吗?启动完提供者后,可以去nacos上面看下是不是有提供者注册上去了,正常情况下你这个顺序是不会有问题的
我确认是先启动提供者。另外,我尝试设置了check=false,这时,消费者可以起来,但是这时也还不能调用远程服务,需要提供者重启一下才可以。
我观察dubbo的缓存文件,消费者启动后,dubbo的缓存有如下内容:
cn.haday.cloud.auth.service.DemoService=empty\://192.168.201.134
提供者重启后,empty和后面的内容才变成正确的地址。
搞了一天还是不行后,我今天改用zookeeper,仅仅换了注册地址和依赖的包,然后在check=true的情况下,先启动提供者,再启动消费者,双双启动成功,能够正常调用。
因此,我怀疑nacos版本的存在一些问题。
y53ybaqx3#
你这个问题我也遇到了,暂时没什么好办法,每次只能先启动消费者,再启动提供者
wvyml7n54#
CAP
tcomlyy65#
你这个问题解决了吗?
72qzrwbm6#
nacos1.3.0 遇到了同样的问题
jucafojl7#
你这个问题我也遇到了,暂时没什么好办法,每次只能先启动消费者,再启动提供者
还是不行,感觉掉坑里面了