SpringCloud Alibaba微服务 -- Nacos使用以及注册中心和配置中心的应用(保姆级)

下载并安装启动nacos

1、下载nacos
下载地址:https://github.com/alibaba/nacos/releases/tag/1.4.2
我们选择windows版本
在这里插入图片描述
解压得到nacos文件夹
在这里插入图片描述
进入到conf目录下修改application.properties配置文件
在这里插入图片描述
将以下这几个配置打开,并配置自己的数据库
在这里插入图片描述
在数据库执行nacos-mysql.sql的sql执行文件
在这里插入图片描述
在这里插入图片描述
2、启动nacos
进入到bin目录下执行startup.cmd执行文件
在这里插入图片描述
启动
在这里插入图片描述
我们看到上面报错了,是因为当前是以集群模式启动,找不到集群相关配置文件cluster.conf;
处理方法:
1 可以使用单机启动方式,在命令行执行 startup.cmd -m standalone
2 集群模式启动,在nacos/conf目录下,将文件 cluster.conf.example 复制一份,重命名未cluster.conf,并将所有内容注释

我们再重新启动
在这里插入图片描述
启动成功,访问nacos地址,http://localhost:8848/nacos
在这里插入图片描述

在这里插入图片描述

将服务注册到nacos

1、引入nacos依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>
        

2、创建application.yml配置文件和启动类并引入nacos
搭建微服务工程 在上一篇文章
springcloud alibaba微服务工程搭建(保姆级)

项目结构
在这里插入图片描述

在application.yml文件中添加nacos相关配置

server:
  port: 9090

spring:
  application:
    name: mdx-shop-user
  cloud:
    nacos:
      discovery:
        server-addr: localhost:8848

启动项目
在这里插入图片描述

已经注册成功,查看nacos服务

在这里插入图片描述

2、命名空间
我们新建一个命名空间,可以将服务注册到这个命名空间下,比如同一团队中我们有很多开发人员连接一个nacos,我们都在本地启动user服务,这个时候导致启动了多个user实例,在本地调试中可能会出现问题,所以我们创建一个命名空间,也可以本地一个命名,测试一个命名,生产一个命名这样随意分配都可以
在这里插入图片描述
修改application.yml配置,添加命名空间
在这里插入图片描述

启动项目
此时服务已经注册到了mdx的命名空间下

在这里插入图片描述

nacos配置中心

我们可以把项目中的一些开关等有可能在线上更改的配置放到nacos的统一配置中心,更改配置不用重新的上线下线服务,极大的降低了成本

1、添加配置中心依赖

		<dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
            <version>${spring-cloud-alibaba.version}</version>
        </dependency>

2、创建bootstrap.properties配置文件
bootstrap文件会在项目启动后第一个被加载

在配置文件中添加如下配置
server-addr:nacos地址
extension-configs: 扩展配置,支持配置多个配置文件
data-id: 配置文件的文件名称加后缀
group:配置文件的组,默认是DEFAULT_GROUP
refresh: 控制该 Data Id 在配置变更时,是否支持应用中可动态刷新, 感知到最新的配置值。默认是不支持的
file-extension: 配置内容的数据格式,配置文件的格式,一般为properties 和 yaml
namespace: 命名空间

spring.application.name=mdx-shop-user
spring.cloud.nacos.config.server-addr=localhost:8848
spring.cloud.nacos.config.extension-configs[0].data-id=mdx-shop-user.yaml
spring.cloud.nacos.config.extension-configs[0].group=shop
spring.cloud.nacos.config.extension-configs[0].refresh=true
spring.cloud.nacos.config.file-extension=yml
spring.cloud.nacos.config.namespace=mdx
spring.cloud.nacos.config.group=shop

3、在nacos平台上创建配置文件映射相关
在mdx命名空间下新建配置
在这里插入图片描述

dataId和group要和配置文件上的对应,并且我们增加一个测试的配置,然后发布
在这里插入图片描述
在这里插入图片描述
4 启动项目测试

接下来测试一下,我们新建一个HelloWordController作为测试接口
mdx-shop-user.test.userId 这个配置是我们在配置中心加的配置,本地的项目中是没有的

@RestController
@RequestMapping("/user")
public class HelloWordController {

    @Value("${mdx-shop-user.test.userId}")
    private String userId;

    @GetMapping("getUserConfigTest")
    public String getUserConfigTest(){
        return userId != null ? userId : "未获取到配置";
    }
}

启动项目
然后发现报错了,找不到相关配置,导致项目启动失败
在这里插入图片描述
原因:
从Spring Boot 2.4版本开始,配置文件加载方式进行了重构,
spring cloud2.4之前的源码:

package org.springframework.cloud.bootstrap;
public class BootstrapApplicationListener implements ApplicationListener<ApplicationEnvironmentPreparedEvent>, Ordered {
    public void onApplicationEvent(ApplicationEnvironmentPreparedEvent event) {
        ConfigurableEnvironment environment = event.getEnvironment();
        if ((Boolean)environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class, true)) {
        }
    }
}

spring cloud2.4之后的源码:

package org.springframework.cloud.util;
public abstract class PropertyUtils {
    public static boolean bootstrapEnabled(Environment environment) {
        return (Boolean)environment.getProperty("spring.cloud.bootstrap.enabled", Boolean.class, false) || MARKER_CLASS_EXISTS;
    }
}

在spring cloud2.4之后将bootstrap.enabled设置为false

我们需要在pom文件中重新添加bootstrap的依赖

		<dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-bootstrap</artifactId>
            <version>3.0.2</version>
        </dependency>

重新启动项目
在这里插入图片描述
已经监听到了配置中心的配置

访问浏览器测试 http://localhost:9090/user/getUserConfigTest
在这里插入图片描述
成功访问到配置

5 @RefreshScope注解 配置动态刷新
SpringCloud新增了一个自定义的作用域:refresh(可以理解为“动态刷新”),同样用了一种独特的方式改变了Bean的管理方式,使得其可以通过外部化配置(.properties)的刷新,在应用不需要重启的情况下热加载新的外部化配置的值。
具体实现大家可以看一下这篇文章 https://blog.csdn.net/JokerLJG/article/details/120254643

我们来测试一下,在HelloWordController类上增加@RefreshScope注解,重启项目

先来访问一下这个接口 http://localhost:9090/user/getUserConfigTest
获取到的值为 mdx123456
在这里插入图片描述
然后我们改一下配置中心的配置
将值改为 mdx123456-new 然后发布
在这里插入图片描述
现在我们不重新启动项目,直接浏览器访问网址 http://localhost:9090/user/getUserConfigTest
成功返回我们新改的配置
在这里插入图片描述

创作不易,点个赞吧👍

最后的最后送大家一句话

白驹过隙,沧海桑田

与君共勉

项目搭建请看上一篇文章
springcloud alibaba微服务工程搭建(保姆级)

下一篇文章
springcloud alibaba微服务 – openfeign的使用(保姆级)

文末送福利啦~

1、Java(SE、JVM)、算法数据结构、数据库(Mysql、redis)、Maven、Netty、RocketMq、Zookeeper、多线程、IO、SSM、Git、Linux、Docker、Web前端相关学习笔记
2、2023最新BATJ大厂面试题集
3、本教程项目源码
领取方式:关注下方公主号,回复:【笔记】、【面试】、【mdx-shop】获取相关福利。

文章持续更新,可以关注下方公众号或者微信搜一搜「 最后一支迷迭香 」获取项目源码、干货笔记、面试题集,第一时间阅读,获取更完整的链路资料。

  • 21
    点赞
  • 50
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 22
    评论
Spring Cloud Alibaba Nacos 是一个服务注册中心配置中心,可以实现服务的注册与发现、配置的动态管理等功能,同时还提供了容灾和高可用的支持。下面简单介绍如何使用 Nacos 实现 Spring Cloud 的配置容灾。 首先,在应用的 `pom.xml` 文件中添加如下依赖: ```xml <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId> <version>2.2.3.RELEASE</version> </dependency> <dependency> <groupId>com.alibaba.cloud</groupId> <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId> <version>2.2.3.RELEASE</version> </dependency> ``` 然后在 `application.properties` 中配置 Nacos 的地址和应用的名称: ```properties spring.cloud.nacos.discovery.server-addr=127.0.0.1:8848 spring.cloud.nacos.discovery.namespace=your-namespace spring.cloud.nacos.config.server-addr=127.0.0.1:8848 spring.cloud.nacos.config.namespace=your-namespace spring.cloud.nacos.config.file-extension=properties spring.application.name=your-application-name ``` 其中 `server-addr` 是 Nacos 的地址,`namespace` 是命名空间,`file-extension` 是配置文件的扩展名,`application.name` 是应用的名称。 接着在 `bootstrap.properties` 中配置应用的环境和配置来源: ```properties spring.profiles.active=dev spring.cloud.nacos.config.prefix=${spring.application.name}-${spring.profiles.active} spring.cloud.nacos.config.group=DEFAULT_GROUP spring.cloud.nacos.config.shared-dataids=${spring.application.name}-${spring.profiles.active}.properties ``` 其中 `spring.profiles.active` 是应用的环境,`prefix` 是配置文件的前缀,`group` 是配置文件所在的分组,`shared-dataids` 是配置文件的名称。 最后,在代码中使用 `@Value` 注解来获取配置项的值: ```java @RestController public class ConfigController { @Value("${config.key}") private String configValue; @GetMapping("/config") public String getConfig() { return configValue; } } ``` 其中 `config.key` 是配置项的名称。 以上就是使用 Nacos 实现 Spring Cloud 的配置容灾的简单示例

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

最后一支迷迭香

您的赞赏将给作者加杯☕️

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值