注册中心和配置中心
记录两套配置,一个是Nacos,既是注册中心也是配置中心.二是注册中心Eureka和配置中心config server.
Nacos:
Nacos的主要作用有两个:一是注册中心,二是配置中心.
下载和配置:
下载:
https://github.com/alibaba/nacos/releases
下载并解压后 打开nacos目录下的conf文件夹,比如我得路径是D:\nacos\conf
找到两个重要文件application.properties和nacos-mysql.sql.
首先打开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=你的mysql用户名
db.password.0=你的mysql密码
### Connection pool configuration: hikariCP
db.pool.config.connectionTimeout=30000
db.pool.config.validationTimeout=10000
db.pool.config.maximumPoolSize=20
db.pool.config.minimumIdle=2
然后将nacos-mysql.sql导入到你的mysql数据库中:先登录mysql,然后用source命令导入,如:
source d:/nacos-mysql.sql
将source后面的路径换成你的文件路径就行了,这样一来nacos的相关数据都会存在你的数据库里.
导入了别忘了查看一下对不对.
以上步骤完成后可以尝试运行nacos,来到目录 D:\nacos\bin,进入cmd,然后输入startup.cmd -m standalone
等待nacos启动.
(可能需要一点时间)
(这就是成功了)
在chrome中输入localhost:8848/nacos查看.
用户名和密码都是nacos,你想用其他的用户名和密码都可以去数据库修改.(只不过密码要加密存储)
在项目中使用Nacos:
首先在common中添加Nacos的相关依赖:
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
然后配置auth和resource的yml文件:
spring:
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: localhost:8848
file-extension: yml #介个系配置文件的格式啦
然后就可以啦,我们启动两个module测试:
来服务列表看看有没有注册成功.注册成功后想调用某个服务时就可以直接用服务名来调用了.
为什么要将服务注册到nacos?(为了更好的查找这些服务)
在Nacos中服务提供者是如何向Nacos注册中心(Registry)续约的?(5秒心跳)
对于Nacos服务来讲它是如何判定服务实例的状态?(检测心跳包,15,30)
服务启动时如何找到服务启动注册配置类?(NacosNamingService)
服务消费方是如何调用服务提供方的服务的?(RestTemplate)
然后说说配置中心:
我们可以将一些通用的配置放在nacos上,在项目启动时从nacos获取配置再启动,比如:日志,mysql的配置信息等等,这样维护起来就会容易不少.
首先将application.yml文件改名为bootstrap.yml,bootstrap.yml文件在配置中心的优先级更高,可以在启动时从配置中心获取配置.
在nacos中新建一个配置,注意配置格式要和配置文件的格式相同:
把原来的yml文件中的datasource部分注释掉
重新运行项目查看是否正常
这样一来就将配置文件放到了配置中心.
那如果我想要多个服务来调用同一个配置文件怎么操作?
我们再新建一个配置文件:
修改auth和resource的yml文件:
# 共享配置
shared-configs[0]:
data-id: public-dataresource.yml
group: Public-Conf
refresh: true #默认false
重启服务测试.
配置中心一般都会配置什么内容?(可能会经常变化的配置信息,例如连接池,日志、线程池、限流熔断规则)
什么信息一般不会写到配置中心?(服务端口,服务名,服务的注册地址,配置中心)
项目中为什么要定义bootstrap.yml文件?(此文件被读取的优先级比较高,可以在服务启动时读取配置中心的数据)
Nacos配置中心宕机了,我们的服务还可以读取到配置信息吗?(可以从内存,客户端获取了配置中心的配置信息以后,会将配置信息在本地内存中存储一份.)
微服务应用中我们的客户端如何获取配置中心的信息?(为了考虑性能我们的服务一般首先会从内存读取配置信息,同时我们的微服务还可以定时向nacos配置中心发请求拉取(pull)更新的配置信息,但是在一定时间间隔内还可能会出现不一致的配置,所以nacos服务端而言,当配置变化时,会通知客户端然后更新客户端.)
微服务应用中客户端如何感知配置中心数据变化?(当数据发生变化时,nacos找到它维护的客户端,然后通知客户端去获取更新的数据,客户端获取数据以后更新本地内存,并在下次访问资源时,刷新@Value注解描述的属性值,但是需要借助@RefreshScope注解对属性所在的类进行描述)
服务启动后没有从配置中心获取我们的配置数据是什么原因?(依赖,配置文件名字bootstrap.yml,配置中心的dataId名字是否正确,分组是否正确,配置的名字是否正确,缩进关系是否正确,假如是动态发布,类上是否有@RefreshScope注解)
你项目中使用的日志规范是什么?(SLF4J)
你了解项目中的日志级别吗?(debug,info,error,…,可以基于日志级别控制日志的输出)
Nacos配置管理模型的背景?(环境不同配置不同)
Nacos配置中的管理模型是怎样的?(namespace,group,service/data-id)
Nacos客户端(微服务)是否可以读取共享配置?(可以)