SpringCloud-Alibaba的Nacos究竟有多好用?(下)

简介: SpringCloud-Alibaba的Nacos究竟有多好用?

注册中心使用方法

本文演示的nacos版本为1.1.3,springcloud版本为2.1.0.RELEASE,springcloud-alibaba采用的版本为Greenwich.SR3,springboot对应版本为2.1.8.RELEASE。

1.添加相关依赖

nacos的Maven依赖

<!--nacos 服务注册/发现-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
</dependency>

要想引入上方依赖,首先需要确定本项目是个boot项目,还需先引入SpringCloud-Alibaba依赖。如果实在不会修改可参考下方pom文件。

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
  <!--在下方填上自已的gva坐标-->
  <groupId>com.xxx</groupId>
    <artifactId>xxx-xxx</artifactId>
    <version>1.0-SNAPSHOT</version>
    <!--版本控制-->
    <properties>
        <java.version>1.8</java.version>
        <spring-cloud.version>Greenwich.SR3</spring-cloud.version>
    </properties>
    <dependencies>
        <!--nacos 服务注册/发现-->
        <dependency>
            <groupId>com.alibaba.cloud</groupId>
            <artifactId>spring-cloud-alibaba-nacos-discovery</artifactId>
        </dependency>
    </dependencies>
    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.alibaba.cloud</groupId>
                <artifactId>spring-cloud-alibaba-dependencies</artifactId>
                <version>2.1.0.RELEASE</version>
                <type>pom</type>
                <scope>import</scope>
            </dependency>
        </dependencies>
    </dependencyManagement>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>${java.version}</source>
                    <target>${java.version}</target>
                    <encoding>UTF-8</encoding>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

2.编写配置文件

声明需注册到,注册中心的地址,以及服务名称等

spring:
  cloud:
    nacos:
      discovery:
        server-addr: xx.xxx.xxx.xx:8848 #注册中心地址
  application:
    name: lgmall-coupon #服务名称
server:
  port: 8010 #端口号


3.编写启动类

使用@EnableDiscoveryClient注解在我们启动类上开启服务注册与发现

@EnableDiscoveryClient

b3c9a6db6f694942a51f6418befe027d.png


4.测试

成功启动后我们打开注册中心控制台,可以查看到注册成功的微服务。


7d0684fb3f0f4e3ca7b3b5d6bbcdf6a1.png


Nacos作为配置中心

在微服务架构中,当系统从一个单体应用拆分成分布式系统上一个个服务节点后,配置文件也必须跟着迁移(分割),这样配置就分散了,不仅如此,分散中还包含着冗余,如下图


76725a415fb34931a65344d8f9ccb22e.png


为了解决这种情况,就诞生了配置中心。配置中心会将配置从各个应用中剥离出来,对配置进行统一管理。使应用自身不需要自已去管理配置。

Nacos配置中心架构

配置中心本身并不复杂,前提是你先将 CAP 的取舍问题晾在一边的话。配置中心最基础的功能就是存储一个键值对,用户发布一个配置(configKey),然后客户端获取这个配置项(configValue);进阶的功能就是当某个配置项发生变更时,将变更告知客户端刷新旧值。


下方的架构图,简要描述了一个配置中心的大致架构,用户可以通过管理平台发布配置,通过 HTTP 调用将配置注册到服务端,服务端将之保存在 MySQL 等持久化存储引擎中;用户通过客户端 SDK 访问服务端的配置,同时建立 HTTP 的长轮询监听配置项变更,同时为了减轻服务端压力和保证容灾特性,配置项拉取到客户端之后会保存一份快照在本地文件中,SDK 优先读取文件里的内容。

e03c19175baf4acebb03121dd8240bf2.png


配置中心使用方法

配置中心与注册中心所有的版本都是一致的。

1.添加相关依赖

引入 Nacos Config Starter依赖。

<!--nacos 配置中心-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
</dependency>

2.修改配置文件

创建bootstrap.properties配置文件,并配置nacos config元数据

  • bootstrap.properties 比yml文件优先加载
spring.application.name=lgmall-coupon
spring.cloud.nacos.config.server-addr=xx.xxx.xxx.xx:xxxx

d08be91901b64e77b674ec0fcd406fc5.png

3. 在控制台添加配置规则

在配置中心添加一个叫 数据集(Data Id) lgmall-coupon.properties。

  • 默认规则 应用名.properties

fdd54012932c4b3b8bb4e14c582dfb62.png


4.编写java代码

通过@Value读取远程配置,另外为保证动态刷新配置还要加上@RefreshScope注解

@RefreshScope
@RestController
@RequestMapping("coupon/coupon")
public class CouponController {
    @Autowired
    private CouponService couponService;
    @Value("${user.ponName}")
    private String name;
    @GetMapping("/test")
    public R test(){
        return R.ok().put("name",name);
    }
 }

5.测试

成功启动后,我们调用接口查看最终结果,发现成功读取到了配置中心的值

e1de45d0405a4f5098e1a2fddaa34b37.png

实战中如何使用Nacos配置中心

  1. 创建命名空间,微服务项目中每个环境创建不同的命名空间,使用分组区分不同的微服务


45e2f0f5c368496aadba305b6bad865c.png

e8f922ba0e324f0486468b0eb65108ff.png

4f13c0d4919642d7be0114e671528aa0.png

9f2bc888b9a24ff09078457ac9a77d92.png

b9f5d93de76e435eb7208a9cbbf68aa7.png

  1. 创建配置集,以下方项目为例,我们需要对除common外5个微服务进行分组,并创建其配置文件。这里我们以test测试环境为例


9603b8d81743452fb0b47ed9d92a3899.png


c9d2b0a07ea149da836623b95cb8aaaf.png

b9cb6864063a435ab6e4d60da072612a.png

aa19f76a2e0d404b98834449803f0609.png

8af5fc1c30454c8d98e985c05f572b5a.png

c9e2fc0b70814e53be29087c3784a62f.png

创建好后整体效果如下


a2c7dafec20b4f4d843ce7442d6b1a7a.png

读取多配置集并动态刷新,微服务任何配置信息都可以放在配置中心中,只需要在bootstrop.properties中说明加载哪些配置文件即可,以前springboot任何从配置文件中获取值的方法(如:@Value @ConfigurationProerties)都能使用,配置中心有的优先读取配置中心的。

# bootstrap.properites 比yml文件优先加载
spring.application.name=lgmall-coupon
spring.cloud.nacos.config.server-addr=xx.xxx.xxx.xx:8848
#使用哪个命名空间下的配置,注意需要写命名空间的唯一id不能写名字
spring.cloud.nacos.config.namespace=ef375233-21be-646b-b955-6f3e0d855951
#数据源相关配置
spring.cloud.nacos.config.ext-config[0].data-id=datasource.yaml
spring.cloud.nacos.config.ext-config[0].group=coupon
spring.cloud.nacos.config.ext-config[0].refresh=true
#mybatis相关配置
spring.cloud.nacos.config.ext-config[1].data-id=mybatis.yaml
spring.cloud.nacos.config.ext-config[1].group=coupon
spring.cloud.nacos.config.ext-config[1].refresh=true
#nacos相关配置
spring.cloud.nacos.config.ext-config[2].data-id=nacos.yaml
spring.cloud.nacos.config.ext-config[2].group=coupon
spring.cloud.nacos.config.ext-config[2].refresh=true
#其它配置
spring.cloud.nacos.config.ext-config[3].data-id=other.yaml
spring.cloud.nacos.config.ext-config[3].group=coupon
spring.cloud.nacos.config.ext-config[3].refresh=true

data-id代表具体哪个配置,group代表读取哪个组,refresh=true代表动态刷新,可对应下图查看

120d39807b8f407c82d5dfabe3b0ba1e.png

  1. 启动并测试


b5dd5917d2b64ae99542e4795a575c33.png

通过上方日志我们可以发现,启动成功后他会优先读取lgmall-coupon.properties配置文件,我们没有配置该配置文件,它就会继续读取datasource.yaml,other.yaml,nacos.yaml,mybatis.yaml


Located property source: CompositePropertySource {name='NACOS', propertySources=[NacosPropertySource {name='lgmall-coupon.properties'}, NacosPropertySource {name='other.yaml'}, NacosPropertySource {name='nacos.yaml'}, NacosPropertySource {name='mybatis.yaml'}, NacosPropertySource {name='datasource.yaml'}]}

我们访问数据库发现请求成功!


be5bf4f0127943debd567799ec7063df.png


相关文章
|
1月前
|
存储 Java Nacos
Spring Cloud+Nacos+KMS 动态配置最佳实践
本文讲述了 Spring Cloud 应用中结合 Nacos 实现了运行期配置动态更新的功能,以及在此基础上结合 KMS 在不改动代码的情况下对应用使用的敏感配置进行保护,解决将配置迁移到 Nacos 中可能存在的数据安全顾虑,并对其底层工作原理做了简单介绍。
429 14
|
4月前
|
Cloud Native Java Nacos
微服务时代的新宠儿!Spring Cloud Nacos实战指南,带你玩转服务发现与配置管理,拥抱云原生潮流!
【8月更文挑战第29天】Spring Cloud Nacos作为微服务架构中的新兴之星,凭借其轻量、高效的特点,迅速成为服务发现、配置管理和治理的首选方案。Nacos(命名和配置服务)由阿里巴巴开源,为云原生应用提供了动态服务发现及配置管理等功能,简化了服务间的调用与依赖管理。本文将指导你通过五个步骤在Spring Boot项目中集成Nacos,实现服务注册、发现及配置动态管理,从而轻松搭建出高效的微服务环境。
305 0
|
5月前
|
NoSQL Java Nacos
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
SpringCloud集成Seata并使用Nacos做注册中心与配置中心
179 3
|
2月前
|
JSON SpringCloudAlibaba Java
Springcloud Alibaba + jdk17+nacos 项目实践
本文基于 `Springcloud Alibaba + JDK17 + Nacos2.x` 介绍了一个微服务项目的搭建过程,包括项目依赖、配置文件、开发实践中的新特性(如文本块、NPE增强、模式匹配)以及常见的问题和解决方案。通过本文,读者可以了解如何高效地搭建和开发微服务项目,并解决一些常见的开发难题。项目代码已上传至 Gitee,欢迎交流学习。
176 1
Springcloud Alibaba + jdk17+nacos 项目实践
|
7月前
|
Unix Shell Linux
SpringCloud Nacos使用
SpringCloud Nacos使用
59 0
|
7月前
|
存储 Nacos 数据安全/隐私保护
【SpringCloud】Nacos的安装、Nacos注册、Nacos服务多级存储模型
【SpringCloud】Nacos的安装、Nacos注册、Nacos服务多级存储模型
88 1
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础2——Nacos配置、Feign、Gateway
nacos配置管理、Feign远程调用、Gateway服务网关
SpringCloud基础2——Nacos配置、Feign、Gateway
|
3月前
|
负载均衡 Java Nacos
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
微服务介绍、SpringCloud、服务拆分和远程调用、Eureka注册中心、Ribbon负载均衡、Nacos注册中心
SpringCloud基础1——远程调用、Eureka,Nacos注册中心、Ribbon负载均衡
|
4月前
|
Cloud Native Java Nacos
Spring Cloud Config、Apollo、Nacos和Archaius对比
这篇文章对比了Spring Cloud Config、Apollo、Nacos和Archaius这四种配置中心的适应场景、优缺点。文中讨论了它们的功能特点,例如Spring Cloud Config的集中化配置管理和动态刷新能力,Apollo的实时配置推送和权限治理,Nacos的服务发现和管理功能,以及Archaius的动态配置更新能力。文章指出选择配置中心应根据项目需求和架构来决定,并提供了一个对比图来帮助读者更直观地理解这些工具的差异。
141 1
Spring Cloud Config、Apollo、Nacos和Archaius对比
|
2月前
|
负载均衡 算法 Nacos
SpringCloud 微服务nacos和eureka
SpringCloud 微服务nacos和eureka
75 0