本文主要简单介绍下nacos可视化界面的使用以及对应的配置中心的管理,包括配置文件的读取等。
命名空间主要用来对服务进行分类,这里以开发环境来创建命名空间,分别为开发环境(dev)和生产环境(prod),在使用springcloud框架进行开发时,可通过spring.cloud.nacos.discovery.namespace = public
来将服务发布到对应的命名空间下
要使得权限控制模块的配置生效,需要修改nacos内application.properties
的配置文件。
nacos.core.auth.enabled=true
将其值修改为true后才能让nacos中的权限控制功能生效,默认是关闭的,不生效。修改后重启nacos服务。
点击用户列表,创建readOnly用户。
点击角色管理中绑定角色,输入角色名称和对应的用户,将用户绑定给对应的角色。
最后点击权限管理中的添加权限按钮,输入角色名,选则对应的资源和动作,资源指的是需要访问的命名空间,动作是选择用户读、写数据的行为。这里选择dev命名空间,只读操作,意思是当前角色对应的用户只能在dev命名空间下进行读操作,不能访问其他命名空间,也不能在dev命名空间下进行写操作。
在微服务架构中,配置文件多而杂,维护起来非常不便,因此需要一个可靠的统一配置管理中心进行管理,nacos配置中心就是其中一个,它可以对系统中配置文件进行统一管理,而且修改会实时生效。
在进行nacos配置动态读取之前,需要对微服务项目进行一定的配置。
首先在微服务项目的resources目录下新建bootstrap.yml
配置文件
# 必须通过bootstrap来配置server-addr
spring:
application:
name: com.tuling.config
cloud:
nacos:
# 通过nginx负载均衡
server-addr: 192.168.40.128:8847
# 当在nacos的application.properties配置中开启了权限,则用户名和密码必须配置,
# 否则会出现 unknown user! 异常
username: nacos
password: nacos
config:
namespace: public
# Nacos客户端 默认是读取application.name配置的服务名(com.tuling.config)的properties文件扩展名(即只能在配置列表中添加.properties的配置文件才能被读取到)
# 当需要改为其他格式,如yaml,需要通过配置file-extension来指定
file-extension: yaml
com.tuling.config
为当前微服务的服务名,随后将微服务启动类修改如下形式
@SpringBootApplication
public class ConfigApplication {
public static void main(String[] args) throws InterruptedException {
ConfigurableApplicationContext applicationContext = SpringApplication.run(ConfigApplication.class, args);
while (true) {
String userName = applicationContext.getEnvironment().getProperty("user.name");
String userAge = applicationContext.getEnvironment().getProperty("user.age");
System.err.println("user name: "+userName+"; age: "+userAge);
TimeUnit.SECONDS.sleep(2);
}
}
}
在nacos可视化界面中新增配置,配置名和服务名相同
文件格式选择yaml时,需要在bootstrap文件中配置file-extension: yaml
,否则读取不到,只能选properties默认格式才能被读取
当配置文件名和data Id 不同时,需要在配置文件中指定对应的data Id
这里提供shared-configs
和extension-configs
两种配置方式
# 必须通过bootstrap来配置server-addr
spring:
application:
name: com.tuling.config
cloud:
nacos:
# 通过nginx负载均衡
server-addr: 192.168.40.128:8847
# 当在nacos的application.properties配置中开启了权限,则用户名和密码必须配置,
# 否则会出现 unknown user! 异常
username: nacos
password: nacos
config:
namespace: public
# Nacos客户端 默认是读取application.name配置的服务名(com.tuling.config)的properties文件扩展名(即只能在配置列表中添加.properties的配置文件才能被读取到)
# 当需要改为其他格式,如yaml,需要通过配置file-extension来指定,而且只针对默认配置文件,当需要指定data id时,该配置其实无效
file-extension: yaml
shared-configs:
- data-id: testConfig # 设置data-id 其中 -符号相当于数组下标,可以配置多个,而且后面配置的会覆盖前面的配置项
refresh: true # 设置动态感知,即配置文件发生变化,服务能立即感知到
- data-id: testConfig2
refresh: true
# 另一种方式设置data id 优先级大于shared-configs
extension-configs[0]:
data-id: testConfig3
refresh: true
extension-configs[1]:
data-id: testConfig4
refresh: true
使用@Value注解获取配置文件中的值时,当配置文件中值发生变化,@Value获取的依然是之前的,不会发生改变,需要加上@RefreshScope
注解解决这一问题,如下一个简易的Controller示例
@RestController
@RequestMapping("/config")
@RefreshScope
public class ConfigController {
@Value("${user.name}")
private String userName;
@GetMapping("/show")
public String getUserName(){
return userName;
}
}