微服务之配置中心Nacos

文章目录

前言

如果你还没有学习OpenFeign可以看之前的博客微服务之hystrix熔断降级和负载均衡,本篇博客是接着上一篇写的。

nacos配置中心

nacos有两大块,一块是 注册中心 ,另一块就是我们今天要学的 配置中心 。还不知道什么是注册中心的请看我之前的博客微服务之SpringCloud Alibaba(注册中心Nacos)

nacos同spring-cloud-config一样,可以作为一个配置中心,统一的来管理配置,可以配置多套环境,各个微服务可以按需到nacos配置中心拉取相关配置,且支持动态刷新@RefreshScope。

实现思路

RabbitMQ

我们将配置信息存入到nacos,然后在项目中创建config模块,然后使用RabbitMQ将配置信息推送到各个模块

若依的实现

我们微服务版的若依是将配置信息放到nacos,然后哪个模块使用就去调用。接下来演示这种方式。

实战

配置nacos

启动nacos

打开文件,路径上cmd回车。

输入指令。

bash 复制代码
# 后缀standalone指的是以单例的方式进行启动
.\startup.cmd -m standalone

浏览器进入上面的路径,输入账号密码,账号密码都是nacos,登陆之后如下

创建命名空间

这个命名空间你可以想成一个文件夹,后面会在这个文件夹内添加配置文件。

注意:命名空间以后在开发中可以区分为 开发、测试、生产 等环境。

结果如下:

命名空间下创建配置文件

  1. 在test命名空间下 创建yaml文件

  2. 填写配置信息。

  3. 点击发布

  4. 点击确定

  5. 点击返回

  6. 结果如下

  7. 可以查看代码示例

  8. 选择SpringCloud

修改父级的pom文件

这个是dependencies标签,而不是dependencyManagement下的dependencies标签。

xml 复制代码
<!--nacos配置中心-->
<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>
<!--  引入bootstrap依赖 应用程序启动时加载boostrap配置文件 -->
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
    <version>3.1.4</version>
</dependency>

修改bill-provider-7780模块

创建bootstrap.yml文件

在resources下新建bootstrap.yml文件

yml 复制代码
server:
  port: 7780
spring:
  application:
    name: bill-provider-7780 # 服务名
  cloud:
    nacos:
      discovery:
        username: nacos
        password: nacos
        server-addr: 127.0.0.1:8848
      config:
        server-addr: 127.0.0.1:8848
        file-extension: yaml # 配置文件格式
        group: DEFAULT_GROUP # 配置分组
        namespace: e0ee261e-6c1a-4db1-bf6f-bdfdce8f89d7 # 命名空间ID, 这个从nacos中复制

注意: 使用nacos作为配置中心时,需要创建一个bootstrap.yaml和

application.yaml两个配置文件,bootstrap.yaml的优先级高于

application.yaml,加载时实现加载bootstrap.yaml中的相关配置

修改application.yml

这里的nacos的配置信息可以去除了,因为已经放到bootstrap.yml

我们只需要激活dev环境即可

我们在最后引入mname和mpwd两个自定义属性看看是否能读取nacos中的配置。

只要能读取说明我们下面mysql的配置信息就能读取到nacos中的配置信息了。

读取nacos中的配置使用${属性名}

yml 复制代码
#server:
#  port: 7780
#spring:
#  application:
#    name: bill-provider-7780 # 服务名
#  cloud:
#    nacos:
#      discovery:
#        username: nacos
#        password: nacos
#        server-addr: 127.0.0.1:8848
spring:
  profiles:
    active: dev # 激活环境
  # 数据库配置
  datasource:
    driver-class-name: com.mysql.cj.jdbc.Driver
    url: jdbc:mysql://127.0.0.1:3306/smbms?useUnicode=true&characterEncoding=utf-8&useSSL=false&allowPublicKeyRetrieval=true
    username: ${mysqlname} # 引入nacos中的mysql账号
    password: ${mysqlpwd} # 引入nacos中的mysql密码
# mybatis-plus:
mybatis-plus:
  mapper-locations: classpath:mappers/*.xml # 扫描mappers映射文件
  type-aliases-package: com.hsh.pojo # 扫描别名
  configuration:
    log-impl: org.apache.ibatis.logging.stdout.StdOutImpl # 打印sql到控制台
    map-underscore-to-camel-case: false # 关闭驼峰映射
mname: ${mysqlname} # 引入nacos中的mysql账号
mpwd: ${mysqlpwd} # 引入nacos中的mysql密码

创建TestConfig

在com/hsh/config文件下创建文件TestConfig,当项目启动时加载nacos中的属性

java 复制代码
package com.hsh.billprovider7780.config;

import org.springframework.beans.factory.annotation.Value;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

@Configuration
public class TestConfig {
    @Value("${mname}")
    private String mname;
    @Value("${mpwd}")
    private String pwd;
    @Bean
    public void show(){
        System.out.println("mname:"+mname+"========"+"pwd:"+pwd);
    }
}

启动bill-provider-7780模块

动态改变数据库的账号密码

所谓的动态改变数据库的账号密码,就是当我们编辑Nacos中的配置文件信息后,会同步更改代码中xml配置文件中的值

修改bill-provider-7780模块

创建IndexController文件

我们在com/hsh/billprovider7780文件下新建controller文件

在controller文件下新建IndexController类

java 复制代码
package com.hsh.billprovider7780.controller;

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

@RestController
@RequestMapping("/index")
@RefreshScope // 开启动态刷新
public class IndexController {
    @Value("${mname}")
    private String mname;
    @Value("${mpwd}")
    private String pwd;
    @GetMapping("/show")
    public String show(){
        return "mname:"+mname+"========"+"pwd:"+pwd;
    }
}

测试

不修改nacos访问

先输入http://localhost:7780/index/show进行访问

修改nacos配置

现在修改nacos中的密码




修改后再次访问

输入http://localhost:7780/index/show进行访问

到此配置成功。

未完待续...

请看我的下一篇博客微服务之Gateway网关(1)

相关推荐
xrkhy4 小时前
微服务之Gateway网关(1)
微服务·架构·gateway
喵叔哟4 小时前
62.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--新增功能--自训练ML模型
微服务·架构·.net
勤源科技12 小时前
全链路智能运维中的实时流处理架构与状态管理技术
运维·架构
JanelSirry13 小时前
SOA和微服务之间的主要区别是什么
微服务·soa
失散1313 小时前
分布式专题——43 ElasticSearch概述
java·分布式·elasticsearch·架构
mit6.82415 小时前
[Backstage] 后端插件 | 包架构 | 独立微服务 | by HTTP路由
架构
xrkhy15 小时前
微服务之hystrix熔断降级和负载均衡
hystrix·微服务·负载均衡
周杰伦_Jay16 小时前
【RocketMQ全面解析】架构原理、消费类型、性能优化、环境搭建
性能优化·架构·rocketmq
没有bug.的程序员18 小时前
服务治理与 API 网关:微服务流量管理的艺术
java·分布式·微服务·架构·wpf