博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
alibaba-nacos之config、discovery
阅读量:4041 次
发布时间:2019-05-24

本文共 5361 字,大约阅读时间需要 17 分钟。

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

nacos的官网地址:

nacos的server的启动,以及支持mysql存储,可以参考官网的快速启动

1.config

pom中引入jar包,Spring cloud不同版本,引入不同的version

org.springframework.cloud
spring-cloud-starter-alibaba-nacos-config
0.1.1.RELEASE

bootstrap.properties配置文件

spring.cloud.nacos.config.server-addr=127.0.0.1:8848spring.cloud.nacos.config.file-extension=ymlspring.application.name=yunlian-truck-ucenterspring.cloud.nacos.config.namespace=598429e8-6c07-4ee3-b96e-ac242c40a382spring.cloud.nacos.config.group=truck-impc#spring.profiles.active=local

active namespace可以在程序启动时,放入启动参数中,namespace可以作为dev,test,prod等环境隔离

 

添加数据到nacos服务器,post数据

@RefreshScope 支持动态更新配置文件中数据,无需重启服务

原理是客户端通过每隔30秒http去服务器请求,加入到服务器到队列,服务器会在29.5秒时处理数据,如果此时服务器上的配置更改了,则从队列中取出客户端,进行实时返回数据

详细参考:

                  

@RestController@IgnoreUserToken@RefreshScopepublic class NacosTestController {    @Value("${ucenter.nacos.test}")    private String test ;    @GetMapping("/config")    public String config(){        return test ;    }}

多个项目共享同一配置的情况,例如开发环境多个应用都引用了mysql的配置,仅在0.2.0的版本以上支持

spring.cloud.nacos.config.server-addr=127.0.0.1:8848# 0.2.1.RELEASE \u4EE5\u4E0A\u652F\u6301\u591A\u4E2A\u914D\u7F6E\uFF0C\u6587\u6863\uFF1Ahttps://github.com/spring-cloud-incubator/spring-cloud-alibaba/wiki/Nacos-config# Nacos \u63A7\u5236\u53F0\u6DFB\u52A0\u914D\u7F6E\uFF1A#   Data ID\uFF1Aapp.properties#   Group\uFF1Amulti-data-ids#   \u914D\u7F6E\u5185\u5BB9\uFF1Aapp.user.cache=falsespring.cloud.nacos.config.ext-config[0].data-id=app.propertiesspring.cloud.nacos.config.ext-config[0].group=multi-data-idsspring.cloud.nacos.config.ext-config[0].refresh=true# 1. \u672C\u5730\u5B89\u88C5 MySQL# 2. Nacos \u63A7\u5236\u53F0\u6DFB\u52A0\u914D\u7F6E\uFF1A#   Data ID\uFF1Adatasource.properties#   Group\uFF1Amulti-data-ids#   \u914D\u7F6E\u5185\u5BB9\u793A\u4F8B\uFF1A#       spring.datasource.url=jdbc:mysql://localhost:3306/test?useSSL=false#       spring.datasource.username=root#       spring.datasource.password=root#       spring.datasource.initial-size=10#       spring.datasource.max-active=20spring.cloud.nacos.config.ext-config[1].data-id=datasource.propertiesspring.cloud.nacos.config.ext-config[1].group=multi-data-ids# 1. \u672C\u5730\u5B89\u88C5 Redis# 2. Nacos \u63A7\u5236\u53F0\u6DFB\u52A0\u914D\u7F6E\uFF1A#   Data ID\uFF1Aredis.properties#   Group\uFF1Amulti-data-ids#   \u914D\u7F6E\u5185\u5BB9\u793A\u4F8B\uFF1A#       spring.redis.host=localhost#       spring.redis.password=20190101#       spring.redis.timeout=5000#       spring.redis.max-idle=5#       spring.redis.max-active=10#       spring.redis.max-wait=3000#       spring.redis.test-on-borrow=falsespring.cloud.nacos.config.ext-config[2].data-id=redis.propertiesspring.cloud.nacos.config.ext-config[2].group=multi-data-ids

 

2.discovery

pom properties

org.springframework.cloud
spring-cloud-starter-alibaba-nacos-discovery
0.1.1.RELEASE
spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848

discovery与eureka都是实现服务注册发现,需要去掉eureka的jar包解决 single bean问题

Field registration in org.springframework.cloud.client.serviceregistry.ServiceRegistryAutoConfiguration$ServiceRegistryEndpointConfiguration required a single bean, but 2 were found:

    - eurekaRegistration: defined by method 'eurekaRegistration' in class path resource [org/springframework/cloud/netflix/eureka/EurekaClientAutoConfiguration.class]
    - nacosRegistration: defined by method 'nacosRegistration' in class path resource [org/springframework/cloud/alibaba/nacos/NacosDiscoveryAutoConfiguration.class]

另外一个错误:
Caused by: java.lang.NoSuchMethodError: org.springframework.cloud.client.serviceregistry.AbstractAutoServiceRegistration.
(Lorg/springframework/cloud/client/serviceregistry/ServiceRegistry;Lorg/springframework/cloud/client/serviceregistry/AutoServiceRegistrationProperties;)V at org.springframework.cloud.alibaba.nacos.registry.NacosAutoServiceRegistration.
(NacosAutoServiceRegistration.java:43) at org.springframework.cloud.alibaba.nacos.NacosDiscoveryAutoConfiguration.nacosAutoServiceRegistration(NacosDiscoveryAutoConfiguration.java:62)
由于NacosAutoServiceRegistration中代码super(serviceRegistry, autoServiceRegistrationProperties);是引用的spring-cloud-commons 2.0版本以上才有的方法,导致0.1.X版本的discovery启动会上述报错。这与spring cloud的对应版本的commons的包的版本冲突
public class NacosAutoServiceRegistration		extends AbstractAutoServiceRegistration
{ private static final Logger LOGGER = LoggerFactory .getLogger(NacosAutoServiceRegistration.class); @Autowired private NacosRegistration registration; public NacosAutoServiceRegistration( ServiceRegistry
serviceRegistry, AutoServiceRegistrationProperties autoServiceRegistrationProperties, NacosRegistration registration) { super(serviceRegistry, autoServiceRegistrationProperties); this.registration = registration; }

解决上述问题,把Spring cloud的版本升级到Edgware.SR5便可以,因为SR5引用的comms包是1.3.5,这个包中有super的方法。

 

discovery注册服务,分namespace注册,需要手动添加nacos-client 0.8版本以上

com.alibaba.nacos
nacos-client
0.8.2

原因是控制台接受的namespace参数为namespaceId,但是0.8版本以下注册接口是参数tenat,所有都注册到了public到空间中了

 

 

综上:

如果使用nacos,建议还是使用0.2.x的版本,这样也就是要求Spring cloud是2.0的版本,也得多注意引入包到版本

 

转载地址:http://jgadi.baihongyu.com/

你可能感兴趣的文章
WAV文件解析
查看>>
WPF中PATH使用AI导出SVG的方法
查看>>
WPF UI&控件免费开源库
查看>>
QT打开项目提示no valid settings file could be found
查看>>
Win10+VS+ESP32环境搭建
查看>>
Ubuntu+win10远程桌面
查看>>
flutter-实现圆角带边框的view(android无效)
查看>>
android 代码实现圆角
查看>>
flutter-解析json
查看>>
android中shader的使用
查看>>
java LinkedList与ArrayList迭代器遍历和for遍历对比
查看>>
drat中构造方法
查看>>
JavaScript的一些基础-数据类型
查看>>
JavaScript基础知识(2)
查看>>
转载一个webview开车指南以及实际项目中的使用
查看>>
android中对于非属性动画的整理
查看>>
一个简单的TabLayout的使用
查看>>
ReactNative使用Redux例子
查看>>
Promise的基本使用
查看>>
coursesa课程 Python 3 programming 统计文件有多少单词
查看>>