Nacos服务配置中心应用实践
基于Spring Boot的日志输出
添加@Slf4j注解,该注解会生成一个静态的log对象用于调用该对象输出日志
@GetMapping("/provider/echo/{msg}")
public String doRestEcho1(
@PathVariable("msg") String msg) throws InterruptedException {
log.info("doRestEcho1 start{}",System.currentTimeMillis());
return serverPort+" say hello "+msg;
}
其中log对象是基于SELF4 API创建,也可以基于注解对象指定类进行描述,来创建日志对象
业务描述
基于nacos配置中心,实现日志级别的动态配置,然后基于日志级别动态调整服务中日志信息的输出
添加依赖
在已有的mu_provider项目中添加依赖
<dependency>
<groupId>com.alibaba.cloud</groupId>
<artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
修改配置文件
将项目中的application.yml的名字修改为bootstrap.yml配置文件(该文件启动优先级最高)
spring:
application:
name: mu-provider
cloud:
nacos:
discovery:
server-addr: localhost:8848
config:
server-addr: 127.0.0.1:8848
file-extension: yml
group: DEFAULT_GROUP_MU
新建Nacos匹配值
其中Data ID的值要与bootstrap.yml中定义的spring.application.name的值相]同(服务名-假如有多个服务一般会创建多个配置实例,不同服务对应不同的配置实例)。
发布测试
Nacos 动态刷新机制分析
1.在服务提供方的Controller添加一个方法
@Value("${logging.level.org.mubai:error}")
private String logLevel;
@GetMapping("/provider/doGetLogLevel")
public String doGetLogLevel(){
log.trace("==log.trace==");
log.debug("==log.debug==");
log.info("==log.info==");
log.warn("==log.warn==");
log.error("==log.error==");
return "log level is "+logLevel;
}
2.在类上添加注解
@RefreshScope
@RestController
public class ProviderController{
其中,@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化),Controller编写好以后,启动配置中心服务,然后进行访问测试。,打开浏览器直接在地址栏输入http://localhost:8082/provider/doGetLogLevel,检测输出结果是否为我们配置中配置的信息,如图所示。
修改日志输出的格式和输出的磁盘地址
Nacos配置管理模型
- Namespace:命名空间,对不同的环境进?隔离,?如隔离开发环境和?产环境。
- Group:分组,将若?个服务或者若?个配置集归为?组。
- Service/DataId:某?个服务或配置集,一般对应一个配置文件。
1.创建新命名空间
在指定命名空间下添加配置,也可以直接克隆配置 修改项目module中的配置文件bootstrap.yml,添加如下配置,关键代码如下:
spring:
cloud:
nacos:
config:
namespace: 4b614b5b-248d-4da9-a442-873aec47b4ba
其中,namespace后面的字符串为命名空间的id,可直接从命名空间列表中进行拷贝. 重启服务,继续刷新http://localhost:8081/config/doGetLogLevel地址。检测输出,看看输出的内容是什么,是否为dev-mu命名空间下配置的内容
分组设计及实现 当我们在指定命名空间下,按环境或服务做好了配置以后,有时还需要基于服务做分组配置,例如,一个服务在不同时间节点(节假日,活动等)切换不同的配置,可以在新建配置时指定分组名称,如图所示: 修改 group ,在controller中添加代码访问
@Value("${server.tomcat.threads.max:200}")
private String MaxThreads;
@RequestMapping("/doGetThread")
public String doGetThread(){
return MaxThreads;
}
共享配置设计及读取
第一步:在nacos中创建一个共享配置文件,例如: 第二步:在指定的微服务配置文件(bootstrap.yml)中设置对共享配置文件的读取,例如: 见红色区域内容。
config:
server-addr: 127.0.0.1:8848
file-extension: yml
namespace: 4b614b5b-248d-4da9-a442-873aec47b4ba
group: DEFAULT_GROUP_51
shared-configs[0]:
data-id: app-public-dev.yml
refresh: true
第三步:在指定的Controller类中读取和应用共享配置即可,例如:
@RefreshScope
@RestController
public class ProviderPageController {
@Value("${page.pageSize:10}")
private Integer pageSize;
@GetMapping("/provider/doGetPageSize")
public String doGetPageSize(){
return "page size is "+pageSize;
}
}
第四步:启动服务进行访问测试。
|