记录使用spring-cloud-starter-alibaba-nacos-config 注册到 nacos 时配置问题。
2020-07-13 06:09
821 查看
这里记录如何实现把消费者注册到Nacos并使用Nacos提供的配置管理。
报错提示:
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'scopedTarget.echoController': Injection of @Reference dependencies is failed; nested exception is java.lang.IllegalStateException: No registry config found or it's not a valid config! The registry config is: <dubbo:registry valid="false" zookeeperProtocol="false" prefix="dubbo.registry" /> at org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor.postProcessPropertyValues(AnnotationInjectedBeanPostProcessor.java:151) ~[dubbo-2.7.3.jar:2.7.3] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1416) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:592) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:515) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$1(AbstractBeanFactory.java:356) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.cloud.context.scope.GenericScope$BeanLifecycleWrapper.getBean(GenericScope.java:389) ~[spring-cloud-context-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.cloud.context.scope.GenericScope.get(GenericScope.java:186) ~[spring-cloud-context-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:353) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.getBean(AbstractApplicationContext.java:1105) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.cloud.context.scope.refresh.RefreshScope.eagerlyInitialize(RefreshScope.java:134) ~[spring-cloud-context-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.cloud.context.scope.refresh.RefreshScope.start(RefreshScope.java:125) ~[spring-cloud-context-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.cloud.context.scope.refresh.RefreshScope.onApplicationEvent(RefreshScope.java:119) ~[spring-cloud-context-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.cloud.context.scope.refresh.RefreshScope.onApplicationEvent(RefreshScope.java:73) ~[spring-cloud-context-2.1.2.RELEASE.jar:2.1.2.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.doInvokeListener(SimpleApplicationEventMulticaster.java:172) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.invokeListener(SimpleApplicationEventMulticaster.java:165) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.context.event.SimpleApplicationEventMulticaster.multicastEvent(SimpleApplicationEventMulticaster.java:139) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:402) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.publishEvent(AbstractApplicationContext.java:359) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishRefresh(AbstractApplicationContext.java:896) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.finishRefresh(ServletWebServerApplicationContext.java:162) ~[spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:552) ~[spring-context-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.springframework.boot.web.servlet.context.ServletWebServerApplicationContext.refresh(ServletWebServerApplicationContext.java:141) ~[spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.refresh(SpringApplication.java:744) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:391) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:312) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1215) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at org.springframework.boot.SpringApplication.run(SpringApplication.java:1204) [spring-boot-2.1.9.RELEASE.jar:2.1.9.RELEASE] at com.xjw.travel.business.BusinessRegApplication.main(BusinessRegApplication.java:13) [classes/:na] Caused by: java.lang.IllegalStateException: No registry config found or it's not a valid config! The registry config is: <dubbo:registry valid="false" zookeeperProtocol="false" prefix="dubbo.registry" /> at org.apache.dubbo.config.AbstractInterfaceConfig.checkRegistry(AbstractInterfaceConfig.java:202) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.ReferenceConfig.createProxy(ReferenceConfig.java:378) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.ReferenceConfig.init(ReferenceConfig.java:329) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.ReferenceConfig.get(ReferenceConfig.java:250) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor$ReferenceBeanInvocationHandler.init(ReferenceAnnotationBeanPostProcessor.java:269) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor$ReferenceBeanInvocationHandler.access$100(ReferenceAnnotationBeanPostProcessor.java:242) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildInvocationHandler(ReferenceAnnotationBeanPostProcessor.java:236) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.buildProxy(ReferenceAnnotationBeanPostProcessor.java:219) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.ReferenceAnnotationBeanPostProcessor.doGetInjectedBean(ReferenceAnnotationBeanPostProcessor.java:134) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor.getInjectedObject(AnnotationInjectedBeanPostProcessor.java:360) ~[dubbo-2.7.3.jar:2.7.3] at org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor$AnnotatedFieldElement.inject(AnnotationInjectedBeanPostProcessor.java:540) ~[dubbo-2.7.3.jar:2.7.3] at org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:90) ~[spring-beans-5.1.10.RELEASE.jar:5.1.10.RELEASE] at org.apache.dubbo.config.spring.beans.factory.annotation.AnnotationInjectedBeanPostProcessor.postProcessPropertyValues(AnnotationInjectedBeanPostProcessor.java:147) ~[dubbo-2.7.3.jar:2.7.3] ... 28 common frames omitted
目录结构
bootstrap.properties文件
spring.profiles.active=pro spring.application.name=business-reg-config spring.cloud.nacos.config.server-addr=192.168.138.9:8848 spring.cloud.nacos.config.file-extension=yaml
nacos配置列表
报错的为pro配置类。之所以出错是因为只有在创建配置列表时没有在Data ID文件加yaml
正确做法:
**
附录
以下代码为实现简单的springcloud alibaba dubbo 服务端注册到nacos并实现熔断,负载均衡。
**
pom.xml
<!-- Spring Cloud Alibaba Begin --> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> </dependency> <!-- Spring Cloud Alibaba End -->
business-reg-config-pro.yaml
base: config: nacos: hostname: 47.112.252.218 port: 8848 sentile: hostname: localhost port: 8080 spring: application: name: business-reg main: allow-bean-definition-overriding: true jackson: time-zone: GMT+8 date-format: yyyy-MM-dd HH:mm:ss cloud: nacos: discovery: server-addr: ${base.config.nacos.hostname}:${base.config.nacos.port} sentinel: transport: dashboard: ${base.config.sentile.hostname}:${base.config.sentile.port} dubbo: scan: base-packages: com.xjw.travel.business protocol: name: dubbo port: -1 serialization: kryo registry: address: nacos://${base.config.nacos.hostname} port: ${base.config.nacos.port} server: port: 9002 management: endpoints: web: exposure: include: "*" user: name: "续集屋"
EchoController:
package com.xjw.travel.business.controller; import com.alibaba.csp.sentinel.annotation.SentinelResource; import com.xjw.travel.business.controller.fallback.EchoControllerFallback; import com.xjw.travel.provider.api.EchoService; import org.apache.dubbo.config.annotation.Reference; import org.springframework.beans.factory.annotation.Value; import org.springframework.cloud.context.config.annotation.RefreshScope; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; /** * @author xjw */ @RestController @RequestMapping(value = "echo") @RefreshScope public class EchoController { @Reference(version = "1.0.0") private EchoService echoService; @Value("${user.name}") private String username; @Value("${server.port}") private String port; @GetMapping(value = "{string}") @SentinelResource(value = "echo", fallback = "echo",fallbackClass = EchoControllerFallback.class) public String echo(@PathVariable String string) { return echoService.echo(string) + " " + username + "服务端口:"+ port; } }
EchoControllerFallback
package com.xjw.travel.business.controller.fallback; public final class EchoControllerFallback { public static String echo(String string) { return "echo fail."; } }
相关文章推荐
- 01.Spring Cloud Alibaba:Nacos 作为注册中心和配置中心使用
- Spring Alibaba Cloud 使用 Seata 实现分布式事务,Nacos 作为 配置中心(一)
- SpringCloud alibaba Nacos简介以及服务注册和服务配置
- Spring Cloud Alibaba(二) 简单使用nacos配置中心
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- spring cloud nacos 二 spring-cloud-alibaba-nacos-config 的使用
- Spring Cloud Alibaba实现服务配置管理和动态服务发现(使用Nacos)
- springcloudalibaba之注册和配置中心nacos
- Spring Cloud Alibaba nacos 配置中心使用
- Spring Cloud Alibaba练习Demo(一):使用Nacos实现服务注册与发现
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- SpringCloud Alibaba从入门到精通教程(二)- 项目中快速集成配置中心·Nacos服务注册发现功能
- Spring Alibaba Cloud使用Seata实现分布式事务,Nacos作为配置中心(一)
- SpringCloud-Alibaba-Nacos 服务注册中心&配置中心
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
- 关于spring-cloud-config配置中心远程拉取有时失败问题记录
- Spring Cloud Alibaba基础教程:使用Nacos作为配置中心
- Spring Cloud - - - 通过消息总线更新配置中心,导致client-config服务实例在注册中心全部丢失的问题
- Spring Cloud Alibaba 使用nacos 注册中心