背景:在分布式系统下,修改配置文件,再重新启动项目,让这些配置生效,是比较费事的,所以我们需要进行创建一个配置中心。
概念:配置中心最基础的功能就是存储一个键值对。用户发布一个配置(configKey),然后客户端获取配置项(configValue),进阶的功能就是当某个配置项发生变更时,不停机就可以动态刷新服务内部的配置项。
@RefreshScope注解的作用:在配置中心相关配置发生改变的时候,能够及时看到类中属性值的更新,是因为底层通过重新创建Controller对想的方式,对属性进行了重新初始化。所以当配置中心要做出改变时,不重新启动服务器,则要添加这个注解。
Namespace:命名空间,对不同的环境进行隔离,比如隔离开发环境和生产环境。
Group:分组,将若干个服务或者若干个配置集归为一组
service/Datald:某一个服务或配置集,一般对应一个配置文件。
namespace后面的字符串为命名空间的id,可直接从命名空间列表中进行拷贝.然后重启服务,继续刷新
一、初始化配置
1、打开操作系统命令行,登陆mysql,执行sql脚本。
source d:/nacos-mysql.sql
2、 打开/nacos/conf/application.properties里打开默认配置,并基于你当前环境配置要连接的数据库,连接数据库时使用的用户名和密码(假如前面有"#"要将其去掉)
### If use MySQL as datasource:
spring.datasource.platform=mysql### Count of DB:
db.num=1## Connect URL of DB:
db.url.0=jdbc:mysql://127.0.0.1:3306/nacos_config?characterEncoding=utf8&connectTimeout=1000&socketTimeout=3000&autoReconnect=true&useUnicode=true&useSSL=false&serverTimezone=UTC
db.user.0=root
db.password.0=root
二、服务启动命令
Linux/Unix/Mac启动命令(standalone代表着单机模式运行,非集群模式):
./startup.sh -m standalone
Windows启动命令(standalone代表着单机模式运行,非集群模式):
startup.cmd -m standalone
访问nacos地址是,输入http://localhost:8848/nacos地址。用户名和密码--nacos/nacos
三、添加依赖
服务的注册与发现:
<dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> </dependency>
四、消费者服务发现和调用
1、在服务者类中提供一个访问的方法。
2、在消费者中创建一个访问的方法,并实现远端服务调用。
使用的RestTemplate对象,调用的是restTemplate.getForObject(url, String.class),这样的方法。先封装要调用服务者的地址放到url中。
五、Nacos负载均衡
使用LoadBalancerClient对象(也叫负载均衡客户端对象)。借助此对象,可以基于服务名从nacos获取多个实例,并且基于算法,进行远端服务调用。
使用的方法是:loadBalancerClient.choose(),里面写nacos服务中心里的服务名
@LoadBalanced
当我们使用@LoadBalanced注解描述RestTemplate对象时,再基于RestTemplate对象对远程服务进行访问时,此请求就会被拦截器拦截下来,请求被拦截到以后,就会先基于服务名找到服务实例(负载均衡)
@Bean
@LoadBalanced
public RestTemplate loadBalancedRestTemplate(){
return new RestTemplate();
}
六、在Nacos中心进行配置
1、引入依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
2、修改application.yml文件的名字为bootstrap.yml---因为这个依赖只识别这个名称的文件。
七、@RefreshScope注解的应用
概念:对于nacos配置中心而言,有系统内部对配置变化的感知,还有外部系统对配置的感知。
使用步骤:
1、在controller类上添加这个注解。@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化)。
2、添加ProviderLogController中添加一个获取日志级别(debug<info<warn<error)的的属性和方法,
3、启动sca-provider服务,然后打开浏览器并输入http://localhost:8081/provider/log/doLog02进行访问测试。
八、本地缓存应用
1、在配置中心设置开启缓存应用:useLocalCache: true
2、设置线程锁,保证查询数据库的次数只有一次,
3、设置双重校验,为了减少阻塞,提高效率。