Nacos融合SpringCloud详解,这一篇足够了。

本文介绍了Nacos作为微服务架构的配置中心,包括安装步骤、启动方法,以及如何在SpringCloud项目中集成和使用Nacos进行服务发现、配置管理和动态刷新。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目录

一、Nacos介绍

二、Nacos安装

Nacos下载

Nacos启动

访问Nacos

三、Nacos使用

pom添加依赖

yaml配置文件

Nacos配置管理

启动测试

Nacos动态刷新


一、Nacos介绍

        Nacos是阿里巴巴开源的一个针对微服务架构的综合解决方案,它提供了服务发现、配置管理、服务治理等功能。

        在微服务架构中,当系统被拆分成分布式服务节点后,配置文件也随之分散,这时就需要一个中心化的配置管理中心对配置进行统一管理。Nacos就扮演了这个角色,它支持几乎所有主流类型的“服务”的发现、配置和管理,包括Kubernetes Service、gRPC & Dubbo RPC Service、Spring Cloud RESTful Service等。

        Nacos也提供了简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。它提供了对服务的实时的健康检查,阻止向不健康的主机或服务实例发送请求。Nacos支持传输层(PING 或 TCP)和应用层(如 HTTP、MySQL、用户自定义)的健康检查。

        其是构建以“服务”为中心的现代应用架构(例如微服务范式、云原生范式)的服务基础设施。它可以帮助您更敏捷和容易地构建、交付和管理微服务平台。总之,Nacos是一个功能强大的微服务架构解决方案,它可以提高分布式系统的可靠性、可扩展性和易用性。

        详细介绍查看:什么是 Nacos

二、Nacos安装

Nacos下载

        github搜索nacos,在alibaba/nacos项目的README.md下,点击下载最新版跳转页,下载nacos的压缩包。

Nacos启动

        进入nacos文件夹的bin目录下,windows选择startup.cmd启动,linux选择startup.sh启动。

        而启动脚本默认设置的是集群模式:set MODE = "cluster",若单机启动则改成set MODE="standalone",或者在执行cmd脚本时加上-m standalone即可。

  • startup.cmd

  • startup.sh

        这边演示windows启动,启动成功后如下图:

访问Nacos

        直接访问http://localhost:8848/nacos/,默认用户名和密码为nacos/nacos

三、Nacos使用

pom添加依赖

        引入版本依赖之前,建议大家先去官网查看对应的SpringBoot版本、SpringCloud版本所支持的nacos最低版本,以防因为版本不对而导致的不必要问题排查。参考:Nacos Spring Cloud 快速开始

        本文只介绍SpringCloud项目如何集成Nacos(请忽略图中与Service无关的子工程),Nacos服务端版本为nacos-server-2.1.0.zip,采用的项目架构如下:

        cloud-demo父模块依赖:

<parent>
  <groupId>org.springframework.boot</groupId>
  <artifactId>spring-boot-starter-parent</artifactId>
  <version>2.4.4</version>
  <relativePath/>
</parent>

<modules>
  <module>userService</module>
  <module>orderService</module>
</modules>

<properties>
  <spring-boot.version>2.4.4</spring-boot.version>
  <spring-cloud.version>2020.0.2</spring-cloud.version>
</properties>

<!-- 模块继承:依赖管理 -->
<dependencyManagement>
  <dependencies>
    <!-- springCloud -->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
                 
    <!--   springboot web-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
      <version>${spring-boot.version}</version>
    </dependency>
                 
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>2.2.6.RELEASE</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

        子模块userService依赖(子模块已经继承父模块依赖,所以版本号无需再填。):

<!--    依赖修改为父工程-->
<parent>
    <artifactId>cloud-demo</artifactId>
    <groupId>com.example</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>

<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <!--nacos配置管理依赖-->
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
    	<!--nacos配置中心-->
        <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    </dependency>
    <dependency>
        <groupId>com.alibaba.cloud</groupId>
	<!--nacos服务注册中心-->
        <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>

yaml配置文件

        在Nacos 2.0.0及更高版本中,配置项应该放在bootstrap.yaml(properties)文件中。

        因为springboot启动时,加载bootstrap优先级会非常高,在创建并配置当前springboot的Environment时就会读取到所配置的bootstrap,后续会将此environment传给nacos调用nacos Server,自始至终nacos都不会读取到本地的application配置。

        userService配置文件bootstrap.yaml如下:

server:
  port: 8001

spring:
  application:
    #对应pom中的配置的name
    name: userService
  profiles:
    active: dev # 指定环境

    cloud:
    nacos:
      discovery:
        # 服务注册地址
        server-addr: 127.0.0.1:8848
        password: nacos
        username: nacos
        # 指定namespace的id,默认为public
        namespace: 75c348bd-4244-4dad-a5b5-357f8f83da26
        # 指定组名,默认为DEFAULT_GROUP
        group: DEFAULT_GROUP
      config:
        # 配置中心地址
        server-addr: 127.0.0.1:8848
        # 配置文件格式
        file-extension: yml
        # 指定namespace的id,默认为public
        namespace: 75c348bd-4244-4dad-a5b5-357f8f83da26
        # 指定组名
        group: DEFAULT_GROUP
        # 共享配置
        shared-configs:
          - application-${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}

        解决SpringCloud项目无法读取bootstrap.yaml配置文件,子模块添加依赖

<dependency>
	<!--解决SpringCloud项目无法读取bootstrap.yaml配置文件-->
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>

Nacos配置管理

  • 创建cloud-demo命名空间

  • 新建配置

        选择不同的配置格式,则配置内容则需按配置的格式去填入即可。

启动测试

        启动子工程userService后,去打开服务列表发现userService服务已注册。

        再测试Nacos配置中心是否生效,UserController增加获取配置信息的接口来测试。

import com.alibaba.fastjson.JSON;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.ResponseBody;

@Controller
@RequestMapping("user")
public class UserController {

    @Value("${user.name}")
    private String userName;

    /**
     * 获取配置信息
     * @return RetResponse
     */
    @GetMapping("/getConfig")
    @ResponseBody
    public String getConfig() {
        return JSON.toJSONString(userName);
    }
}

        使用apifox工具来调用http://localhost:8001/user/getConfig接口后发现配置中心已生效。

Nacos动态刷新

        实现Nacos属性值自动刷新,可以简化我们一旦改动Nacos配置后再重启服务的繁琐操作。

修改配置文件

config:
  # 配置中心地址
  server-addr: 127.0.0.1:8848
  # 配置文件格式
  file-extension: yml
  # 指定namespace的id,默认为public
  namespace: 75c348bd-4244-4dad-a5b5-357f8f83da26
  # 指定组名,默认为DEFAULT_GROUP
  group: DEFAULT_GROUP
  # 共享配置
  # shared-configs:
  #  - application-${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
  shared-configs[0]:
    data-id: application-${spring.application.name}-${spring.profiles.active}.${spring.cloud.nacos.config.file-extension}
  # 开启自动刷新
    refresh: true

controller层增加@RefreshScope注解

        以上配置完以后,改动Nacos配置文件无需重启服务,就可读取最新的配置内容。

        代码自取地址:https://github.com/xiafan0905/cloud-demo

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值