Nacos配置文件更新+热更新+多环境配置共享+集群搭建

对服务配置文件

场景:

如果多个服务对应的配置文件都需要更改时,可以利用配置管理,方便对配置文件进行更新,而且是在本地配置前先读取nacos的配置文件,优先级大于本地配置文件

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第1张图片

配置步骤

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第2张图片
1.首先在Nacos中的配置列表中增加一个配置文件:文件名字:服务名称+环境+yaml

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第3张图片
2.然后配置一个bootstrap.yaml,里面是服务的配置信息:(服务名称,Nacos连接地址,环境,extendion拓展的yaml配置)——>注意之前的yaml配置要删除,放在bootstrap.yaml中

spring:
  application:
    name: userservice # 服务名称
  profiles:
    active: dev # 环境
  cloud:
    nacos:
      server-addr: localhost:8848 #连接nacos地址,根据服务名称进行配置拓展
      config:
        file-extension: yaml # 文件后缀

3.然后在控制层可以进行测试

在这里插入图片描述

总结:

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第4张图片

实现热更新

前言:为什么要使用热更新?

答:热更新可以在不用重启服务的情况下,对服务的配置进行更改,方便客户

步骤

方法1.使用注解@RefreshScope注解实现热更新

方法2.自动实现刷新利用@ConfigurationProperties:通过配置一个Properties类注入容器中,里面配置dateformat,然后注入controller中;

对比:@RefreshScope会让代码太冗余了,如果我多个控制器都要用到扩展的配置文件中的属性,岂不是每个属性都得@Value赋值+@RefreshScope;

而@ConfigurationProperties+@Component将扩展属性全部放到容器中,我们的控制器直接注入这个组件就行了,然后get值,这样代码冗余减少了很多;

package cn.itcast.user.config;
 
import lombok.Data;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.stereotype.Component;
 
/**
 * @author diao 2022/5/7
 */
@Component
@Data
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;
}
package cn.itcast.user.web;
 
import cn.itcast.user.config.PatternProperties;
import cn.itcast.user.pojo.User;
import cn.itcast.user.service.UserService;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.cloud.context.config.annotation.RefreshScope;
import org.springframework.web.bind.annotation.*;
 
import java.time.LocalDate;
import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Locale;
 
@Slf4j
@RestController
//@RefreshScope //完成热更新
@RequestMapping("/user")
public class UserController {
 
    @Autowired
    private UserService userService;
 
    /**
     * 将userservice服务拓展的配置属性(pattern.dateformat)注入
     */
//    @Value("${pattern.dateformat}")
//    private String dateformat;
 
    @Autowired
    private PatternProperties patternProperties;
 
    @GetMapping("now")
    public String now(){
        System.out.println(patternProperties.getDateformat());
       return LocalDateTime.now().format(DateTimeFormatter.ofPattern(patternProperties.getDateformat()));
    }
 
    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }
}

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第5张图片

多环境(测试+开发+生产)配置共享

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第6张图片

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第7张图片

步骤

1.先配置全局环境配置(支持多环境)
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第8张图片

2.分别在具体环境的配置文件和全局环境配置文件中增加属性配置

当前环境配置:
在这里插入图片描述

全局环境配置:
在这里插入图片描述
3.在配置类中将这些新属性注入,并在控制器中获取json数据,看谁优先级更高

@Data
@Component
@ConfigurationProperties(prefix = "pattern")
public class PatternProperties {
    private String dateformat;

    private String envSharedValue;

    private String name;
}
 
@Slf4j
@RestController
@RequestMapping("/user")
//@RefreshScope
public class UserController {

    @Autowired
    private UserService userService;

//    @Value("${pattern.dateformat}")
//    private String dateformat;

    @Autowired
    private PatternProperties properties;

    @GetMapping("now")
    public String now(){
        return LocalDateTime.now().format(DateTimeFormatter.ofPattern(properties.getDateformat()));
    }

    /**
     * 路径: /user/110
     *
     * @param id 用户id
     * @return 用户
     */
    @GetMapping("/{id}")
    public User queryById(@PathVariable("id") Long id) {
        return userService.queryById(id);
    }

    @GetMapping("prop")
    public PatternProperties properties(){
        return properties;
    }
}

可以在服务配置里面修改服务实例的测试环境,就不用每次去修改代码了

在这里插入图片描述

结果:

dev环境:
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第9张图片

test环境:
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第10张图片

本地配置和远程全局配置和远程环境配置三者都有同一属性时: 优先级 本地< 全局 < 环境

Nacos集群搭建

nginx完成Nacos的负载均衡,mysql实现主从复制 (Nacos集群读取共享数据)

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第11张图片

步骤

直接本地复制三个nacos ,开三个端口nacos
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第12张图片

1.先创建数据库,根据Nacos配置文件中的内容(包括:连接的数据库+username+password+所连接的数据库个数)
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第13张图片
2.不同nacos中的配置端口需要修改,修改成与其他Nacos不一致的

在这里插入图片描述
3.在nacos中的cluster.conf配置中修改端口:也就是说当前nacos被启动,端口会是其中一个

特别注意,第一个地址是0.1:8845 后面的是两个0.1后面加的是点 不是冒号
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第14张图片

4.当我们启动多个nacos时,对其在地址栏进行访问,会采用负载均衡的方法,访问Nacos集群中的一个服务器;

在nginx中进行配置

此时nginx反向代理已经将端口修改成了80 所以要将idea中的8848端口改成80端口

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第15张图片

5.然后访问即可;
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第16张图片

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第17张图片

Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第18张图片

在nacos中编写配置 则直接储存到本地数据库中
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第19张图片
Nacos配置文件更新+热更新+多环境配置共享+集群搭建_第20张图片

你可能感兴趣的:(微服务,网络协议,网络,java)