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

简介: 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】获取相关福利。

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

相关文章
|
3月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
79 3
|
8天前
|
Kubernetes Nacos 容器
nacos注册不上
我正在使用开源的Nacos,并已在Kubernetes中部署了Nacos服务,通过端口映射可在集群外访问Nacos控制台。Kubernetes使用NodePort类型暴露了8848、9848、9849、7848和9555端口,但在尝试注册时遇到问题,出现“Client not connected, current status: STARTING”的错误,导致启动失败。
|
20天前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
2月前
|
Cloud Native Java Nacos
微服务注册中心-Nacos概述
该博客文章提供了对Nacos的全面概述,包括其基本介绍、与Spring Cloud集成的优势、主要功能以及如何在Spring Cloud Alibaba项目中作为服务注册中心使用Nacos。文章解释了Nacos是一个动态服务发现、配置管理和服务管理平台,支持服务发现、健康监测、动态配置、DNS服务和元数据管理。还介绍了如何下载和启动Nacos服务器,以及如何将微服务注册到Nacos中,包括修改pom.xml文件引入依赖、配置application.properties文件和使用@EnableDiscoveryClient注解开启服务注册发现功能。
微服务注册中心-Nacos概述
|
2月前
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
|
3月前
|
运维 Kubernetes Serverless
Serverless 应用引擎使用问题之如何实现与Nacos的交互
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
|
2月前
|
Java Nacos Docker
"揭秘!Docker部署Seata遇上Nacos,注册成功却报错?这些坑你不得不防!一网打尽解决秘籍,让你的分布式事务稳如老狗!"
【8月更文挑战第15天】在微服务架构中,Nacos搭配Seata确保数据一致性时,Docker部署Seata后可能出现客户端连接错误,如“can not connect to services-server”。此问题多由网络配置不当、配置文件错误或版本不兼容引起。解决策略包括:调整Docker网络设置确保可达性;检查并修正`file.conf`和`registry.conf`中的Nacos地址和端口;验证Seata与Nacos版本兼容性;修改配置后重启服务;参考官方文档和最佳实践进行配置。通过这些步骤,能有效排除故障,保障服务稳定运行。
65 0
|
2月前
|
Kubernetes Nacos 微服务
【技术难题破解】Nacos v2.2.3 + K8s 微服务注册:强制删除 Pod 却不消失?!7步排查法+实战代码,手把手教你解决Nacos Pod僵死问题,让服务瞬间满血复活!
【8月更文挑战第15天】Nacos作为微服务注册与配置中心受到欢迎,但有时会遇到“v2.2.3 k8s 微服务注册nacos强制删除 pod不消失”的问题。本文介绍此现象及其解决方法,帮助开发者确保服务稳定运行。首先需检查Pod状态与事件、配置文件及Nacos配置,确认无误后可调整Pod生命周期管理,并检查Kubernetes版本兼容性。若问题持续,考虑使用Finalizers、审查Nacos日志或借助Kubernetes诊断工具。必要时,可尝试手动强制删除Pod。通过系统排查,通常能有效解决此问题。
47 0
|
2月前
|
安全 Nacos 数据库
【技术安全大揭秘】Nacos暴露公网后被非法访问?!6大安全加固秘籍,手把手教你如何保护数据库免遭恶意篡改,打造坚不可摧的微服务注册与配置中心!从限制公网访问到启用访问控制,全方位解析如何构建安全防护体系,让您从此告别数据安全风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其公网暴露可能引发数据库被非法访问甚至篡改的安全隐患。本文剖析此问题并提供解决方案,包括限制公网访问、启用HTTPS、加强数据库安全、配置访问控制及监控等,帮助开发者确保服务安全稳定运行。
108 0
|
2月前
|
安全 Nacos 数据安全/隐私保护
【技术干货】破解Nacos安全隐患:连接用户名与密码明文传输!掌握HTTPS、JWT与OAuth2.0加密秘籍,打造坚不可摧的微服务注册与配置中心!从原理到实践,全方位解析如何构建安全防护体系,让您从此告别数据泄露风险!
【8月更文挑战第15天】Nacos是一款广受好评的微服务注册与配置中心,但其连接用户名和密码的明文传输成为安全隐患。本文探讨加密策略提升安全性。首先介绍明文传输风险,随后对比三种加密方案:HTTPS简化数据保护;JWT令牌减少凭证传输,适配分布式环境;OAuth2.0增强安全,支持多授权模式。每种方案各有千秋,开发者需根据具体需求选择最佳实践,确保服务安全稳定运行。
103 0
下一篇
无影云桌面