微服务架构(四)-- Nacos服务配置中心

目录

配置中心简介

什么是配置中心?

配置中心有什么用?

常见的配置中心?

配置中心存放什么内容?

配置中心内的配置信息保存在哪里?

Nacos配置快速入门

新建Nacos配置

测试Nacos数据读取

@RefreshScope注解的应用

Nacos配置管理模型

概述

命名空间设计

分组设计及实现

共享配置设计及读取

拓展 

配置中心简介

什么是配置中心?

管理项目配置信息的一个服务

配置中心有什么用?

集中管理项目配置信息,对配置信息进行动态发布

常见的配置中心?

nacos(阿里配置中心) Apollo(阿波罗,携程配置中心)

配置中心存放什么内容?

经常变化的配置信息

配置中心内的配置信息保存在哪里?

数据库中

Nacos配置快速入门

第一步:创建ProviderLogController对象:

        日志级别:trace

package com.jt.provider.controller;

import lombok.extern.slf4j.Slf4j;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
/**
 * 基于此controller演示配置中心的作用.
 * 在这个controller中我们会基于日志对象
 * 进行日志输出测试.
 */
//@Slf4j
@RestController
public class ProviderLogController {
    //创建一个日志对象
    //org.slf4j.Logger (Java中的日志API规范,基于这个规范有Log4J,Logback等日志库)
    //org.slf4j.LoggerFactory
    //log对象在哪个类中创建,getLogger方法中的就传入哪个类的字节码对象
    //记住:以后只要Java中使用日志对象,你就采用下面之中方式创建即可.
    //假如在log对象所在的类上使用了@Slf4j注解,log不再需要我们手动创建,lombok会帮我们创建
   private static Logger log=
           LoggerFactory.getLogger(ProviderLogController.class);
    @GetMapping("/provider/log/doLog01")
    public String doLog01(){//trace

如何修改日志级别(会输出该级别及该级别以上的日志信息):

logging:
  level:
    com.jt: debug

微服务架构(四)-- Nacos服务配置中心_第1张图片

 第二步:添加配置依赖


            com.alibaba.cloud
            spring-cloud-starter-alibaba-nacos-config
        

第三步: 将项目sca-provider的application.yml的名字修改为bootstrap.yml(启动优先级最高),并添加配置中心配置

微服务架构(四)-- Nacos服务配置中心_第2张图片

新建Nacos配置

打开nacos配置中心,新建配置

微服务架构(四)-- Nacos服务配置中心_第3张图片

 微服务架构(四)-- Nacos服务配置中心_第4张图片

微服务架构(四)-- Nacos服务配置中心_第5张图片

测试Nacos数据读取

微服务架构(四)-- Nacos服务配置中心_第6张图片

 动态发布 修改配置中心 不对项目进行重启 观察日志变化

微服务架构(四)-- Nacos服务配置中心_第7张图片

 微服务架构(四)-- Nacos服务配置中心_第8张图片

 微服务架构(四)-- Nacos服务配置中心_第9张图片

@RefreshScope注解的应用

 在浏览器中显示日志级别的变化

第一步:在ProviderLogController类的上面添加一个@RefreshScope注解

@RefreshScope
@RestController
public class ProviderLogController{
  //.....
}

第二步:添加ProviderLogController中添加一个获取日志级别(debug

@Value("${logging.level.com.jt:error}")
private String logLevel;
@GetMapping("/provider/log/doLog02")
public String doLog02(){
   log.info("log level is  {}",logLevel);
   return  "log level  is "+logLevel;
}

 第三步:进行访问测试

结论:如果不加@RefreshScope注解,在配置文件中修改日志级别,后端会感知修改,前端不会感知到变化,如果加上注解,前端可以感知到配置变化,但是会重新创建类。

Nacos配置管理模型

概述

Nacos 配置管理模型由三部分构成

在这里插入图片描述

  • Namespace:命名空间,对不同的环境进⾏隔离,⽐如隔离开发环境和⽣产环境。
  • Group:分组,将若⼲个服务或者若⼲个配置集归为⼀组。
  • Service/DataId:某⼀个服务或配置集,一般对应一个配置文件。

命名空间设计

默认存储到public命名空间,我们也可以自己创建命名空间。

第一步:创建新命名空间

微服务架构(四)-- Nacos服务配置中心_第10张图片

微服务架构(四)-- Nacos服务配置中心_第11张图片 第二步:在指定命名空间下添加配置,也可以直接从配置列表中克隆

微服务架构(四)-- Nacos服务配置中心_第12张图片

微服务架构(四)-- Nacos服务配置中心_第13张图片

 第三步:修改div命名空间中sca-provider的配置并进行测试

微服务架构(四)-- Nacos服务配置中心_第14张图片

微服务架构(四)-- Nacos服务配置中心_第15张图片

 修改配置文件bootstrap.yml,定义命名空间

spring:
  cloud:
    nacos:
      config:
        namespace: 0cf76bbd-f6b2-47a9-839f-6a6587e71632
        ……

微服务架构(四)-- Nacos服务配置中心_第16张图片

重启ProviderApplication进行测试

微服务架构(四)-- Nacos服务配置中心_第17张图片

分组设计及实现

在命名空间内,我们还可以对服务进行分组。

微服务架构(四)-- Nacos服务配置中心_第18张图片

修改boostrap.yml配置类,在其内部指定我们刚刚创建的分组

微服务架构(四)-- Nacos服务配置中心_第19张图片

 新建ProviderCacheController,用于获取useLocalCache的值

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
/**
 * 读取配置中心useLocalCache的值 是否使用本地缓存
 */
public class ProviderCacheController {
    @Value("${useLocalCache:false}")
    private boolean useLocalCache;
    private String douseLocalCache(){
        return "useLocalCache's is "+useLocalCache;
    }
}

进行访问测试

微服务架构(四)-- Nacos服务配置中心_第20张图片

 微服务架构(四)-- Nacos服务配置中心_第21张图片

共享配置设计及读取

当同一个namespace的多个配置文件中都有相同配置时,可以对这些配置进行提取,然后存储到nacos配置中心的一个或多个指定配置文件,哪个微服务需要,就在服务的配置中设置读取即可。

第一步:在nacos中创建一个共享配置文件

微服务架构(四)-- Nacos服务配置中心_第22张图片

 第二步:配置文件设置

server:
  port: 8081
spring:
  application:
    name: sca-provider
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848
      config:
        server-addr: localhost:8848
        file-extension: yml
        namespace: 23495cec-5fb1-4699-a7dd-37cf90ef207c
        shared-configs[0]:
          dataId: app-public.yml
          refresh: true
#        group: DEFAULT_GROUP_51


 第三步:读取配置文件

package com.jt.controller;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;

@RestController
@RefreshScope
public class ProviderShareController {
    @Value("${a.b:111}")
    private String share;
    @GetMapping("/share")
    public String getShare(){
        return "share is "+share;
    }
}

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

微服务架构(四)-- Nacos服务配置中心_第23张图片

拓展 

设计:当缓存开启时,从缓存中去数据,当缓存没有开启,从数据库取数据。

    private CopyOnWriteArrayList localCache = new CopyOnWriteArrayList();
    @GetMapping("/cache2")
    public List getCache02(){
        if(!useLocalCache){
            System.out.println("从数据库取数据");
            return Arrays.asList("a","b","c");
        }
        if(localCache.isEmpty()){
            System.out.println("从缓存取数据");
            List list = Arrays.asList("a", "b", "c");
            localCache.addAll(list);
        }
        return localCache;
    }

设计:如果有多个bootstrap.yml文件,如何进行选择

第一步:新建bootstrap.yml文件

微服务架构(四)-- Nacos服务配置中心_第24张图片

 第二步:编辑bootsrap.yml配置文件,进行选择

spring:
  profiles:
    active: test

第三步:进行测试

微服务架构(四)-- Nacos服务配置中心_第25张图片

结论:当采用默认public命名空间时,该空间内没有设置共享配置,因此,共享值为默认值 

你可能感兴趣的:(微服务,微服务,架构,microservices)