nace服务配置中心,对日志输出的操作,以及对nacos 命名空间的分组等操作

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 # Configure the data format of the content, default to properties
        group: DEFAULT_GROUP_MU
        #不加该属性会默认读取DEFAULT_GROUP中的配置

新建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 //加了该注解spring会动态的重新刷新配置中心的数据
    @RestController
    public class ProviderController{

其中,@RefreshScope的作用是在配置中心的相关配置发生变化以后,能够及时看到类中属性值的更新(底层是通过重新创建Controller对象的方式,对属性进行了重新初始化),Controller编写好以后,启动配置中心服务,然后进行访问测试。,打开浏览器直接在地址栏输入http://localhost:8082/provider/doGetLogLevel,检测输出结果是否为我们配置中配置的信息,如图所示。

修改日志输出的格式和输出的磁盘地址

在这里插入图片描述

#日志配置
#logging:
#  level:
#    com.cy: error
#spring boot日志格式
#logging:
#  pattern:
#    console: '%-5level %msg %n'
#    file: '%d %-5level %thread %logger %msg %n'
# %d 表示日期时间
# %-5level 日志级别
# %thread 线程名‘
# %logger 日志输出方(哪个类中输出的日志)
# %msg 具体的日志信息
# %n 换行

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 # Configure the data format of the content, default to properties
        namespace: 4b614b5b-248d-4da9-a442-873aec47b4ba
        group: DEFAULT_GROUP_51
        shared-configs[0]:
          data-id: app-public-dev.yml
          refresh: true #默认false,共享配置更新,引用此

第三步:在指定的Controller类中读取和应用共享配置即可,例如:

@RefreshScope
@RestController
public class ProviderPageController {
    @Value("${page.pageSize:10}")
    private Integer pageSize;
    @GetMapping("/provider/doGetPageSize")
    public String doGetPageSize(){
        //return String.format()
        return "page size is "+pageSize;
    }
}

第四步:启动服务进行访问测试。

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值