NipGeihou's blog NipGeihou's blog
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档

NipGeihou

我见青山多妩媚,料青山见我应如是
  • Java

    • 开发规范
    • 进阶笔记
    • 微服务
    • 快速开始
    • 设计模式
  • 其他

    • Golang
    • Python
    • Drat
  • Redis
  • MongoDB
  • 数据结构与算法
  • 计算机网络
  • 应用

    • Grafana
    • Prometheus
  • 容器与编排

    • KubeSphere
    • Kubernetes
    • Docker Compose
    • Docker
  • 组网

    • TailScale
    • WireGuard
  • 密码生成器
  • 英文单词生成器
🍳烹饪
🧑‍💻关于
  • 分类
  • 标签
  • 归档
  • 设计模式

  • 开发规范

  • 经验分享

  • 记录

  • 快速开始

  • 笔记

  • 面试题

  • 微服务

    • 项目结构

    • Nacos

      • Microservice - Nacos
        • 应用场景
          • 服务配置
          • 服务发现
        • 部署
          • Windows / Linux / Mac
          • Linux/Unix/Mac
          • Windows
          • Docker
        • 示例
          • 配置管理
          • 服务注册
          • 生产者
          • 消费者
    • Gateway

    • OpenFeign

    • Seata

  • 踩过的坑

  • Java
  • 微服务
  • Nacos
NipGeihou
2022-07-31
目录

Microservice - Nacos

注意

由于技术日新月异,本文具有时效性,以官方文档 (opens new window)为准。

什么是 Nacos

Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现、服务配置、服务元数据及流量管理。

来自 Nacos 官网 (opens new window)

# 应用场景

# 服务配置

可将 application.yml 中的配置写在 nacos 中,可使得在微服务集群中灵活修改配置。

笔记

在启动服务时,添加指定环境参数 spring.profiles.active ,实现灵活切换配置。

# 服务发现

可将微服务注册到 nacos 上,使得网关服务能将请求转发到对应微服务上。

笔记

这就跟 DNS 一样,对于用户来讲,不需要关心某个网站的 ip 地址是多少,只要在浏览器输入指定的域名就可以访问到该网站(如 google.com ),也就不用担心因为网站更换了服务器导致 ip 地址变更导致的访问失败。

# 部署

Nacos 快速开始 (opens new window)

# Windows / Linux / Mac

这里演示的是非高可用的开发环境的 nacos 部署

下载:Releases · alibaba/nacos (opens new window)

# Linux/Unix/Mac

启动命令(standalone 代表着单机模式运行,非集群模式):

sh startup.sh -m standalone

如果您使用的是 ubuntu 系统,或者运行脚本报错提示 符号找不到 ,可尝试如下运行:

bash startup.sh -m standalone

# Windows

启动命令 (standalone 代表着单机模式运行,非集群模式):

startup.cmd -m standalone
http://127.0.0.1:8848/nacos/index.html
username: nacos
password: nacos

# Docker

  • Nacos Docker 快速开始 (opens new window)
  • nacos/nacos-server | Docker Hub (opens new window)

推荐使用 docker composer,参考示例:nacos-docker/example/standalone-mysql-8.yaml at master · nacos-group/nacos-docker (opens new window)

version: "3.8"
services:
  nacos:
    image: nacos/nacos-server:${NACOS_VERSION}
    container_name: nacos-standalone-mysql
    env_file:
      - ../env/nacos-standlone-mysql.env
    volumes:
      - ./standalone-logs/:/home/nacos/logs
    ports:
      - "8848:8848"
      - "9848:9848"
    depends_on:
      mysql:
        condition: service_healthy
    restart: always
  mysql:
    container_name: mysql
    build:
      context: .
      dockerfile: ./image/mysql/8/Dockerfile
    image: example/mysql:8.0.30
    env_file:
      - ../env/mysql.env
    volumes:
      - ./mysql:/var/lib/mysql
    ports:
      - "3306:3306"
    healthcheck:
      test: [ "CMD", "mysqladmin" ,"ping", "-h", "localhost" ]
      interval: 5s
      timeout: 10s
      retries: 10

配置:

  • 在 nacos-group/nacos-docker (opens new window) 中列出了常用属性配置,可在环境变量中配置

  • 如果您有大量自定义配置需求,强烈建议在生产环境中挂载 application.properties 。

    nacos-docker/example/init.d/application.properties (opens new window)

笔记

虽然 docker hub 也有 Readme,但显然是很久没有更新的,nacos-group/nacos-docker (opens new window) 中的 Readme 是最新的。

# 示例

# 配置管理

Nacos config · alibaba/spring-cloud-alibaba Wiki (opens new window)

nacos 添加命名空间

添加时需指定 id 与环境变量名称一致,如 dev ,确保切换环境时能正确匹配,如不指定 id,nacos 会自动生成一个随机 id,不便于使用。

nacos 添加配置

  • Data Id:相当于配置文件名,需包含后缀,如 hello-service.yml

添加依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-config</artifactId>
    <version>版本号</version>
</dependency>

笔记

版本号与 Spring Boot 版本号一致

Nacos 依赖的版本号与 Spring Boot 的关系,参考版本说明・alibaba/spring-cloud-alibaba Wiki (opens new window)

实践:在本段编写时 RuoYi-Vue-Plus (opens new window) 5.x 分支的 Spring Boot 版本为 3.1.5 ,而此时 Nacos 对应 Spring Boot 3.0 的分支最新版本为 2022.0.0.0 ,而推荐的 Spring Boot 版本为 3.0.2 ,经尝试不支持 Spring Boot 3.1.5 ,因此需要将项目的 Spring Boot 版本降到 3.0.x ,这里我使用了当前的 GA 版本 3.0.12 ,成功运行。

在服务中创建 bootstrap.yml 配置文件

spring:
  profiles:
    #启动环境配置
    active: #spring.profiles.active#

  application:
    name: 应用名称("my-application")

  cloud:
    nacos:
      config:
        server-addr: ${my.nacos.config-server:192.168.1.123:8848}
        namespace: ${my.nacos.config-namespace:${spring.profiles.active}}
        file-extension: yml

参考配置:

点击查看
spring:
  profiles:
    #启动环境配置
    active: #spring.profiles.active#

  application:
    name: 应用名称("my-application")

  cloud:
    nacos:
      config:
        # 读取机器bootstrap.yml 开发环境使用server-addr
        server-addr: ${my.nacos.config-server:192.168.1.123:8848}
        # 生产环境是阿里云ACE服务 需要使用endpoint连接
        endpoint: ${my.nacos.config-endpoint:}
        namespace: ${my.nacos.config-namespace:${spring.profiles.active}}
        file-extension: yml
        group: DEFAULT_GROUP
        extension-configs:
          - data-id: common-configuration.yml
            group: DEFAULT_GROUP

          - data-id: resources-config.yml
            group: DEFAULT_GROUP

          - data-id: common-config.yml
            group: DEFAULT_GROUP

          - data-id: db.yml
            group: DEFAULT_GROUP

如何实现加载不同环境的配置?

在不同环境运行应用时,启动时添加 spring.profiles.active 指定运行环境,如果没有指定( my.nacos.config-namespace )命名空间参数,默认使用 spring.profiles.active 作为命名空间名称。

默认会加载哪些配置?

${spring.application.name}.${file-extension:properties}
${spring.application.name}-${profile}.${file-extension:properties}

# 服务注册

# 生产者

导入依赖

<dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
    <version>${latest.version}</version>
</dependency>
  • Maven Repository: com.alibaba.cloud » spring-cloud-starter-alibaba-nacos-discovery (opens new window)
  • Nacos 版本说明 (opens new window),Spring Cloud Alibaba 对 Spring Boot 版本有对应要求,一般都不是最新版的 Spring Boot

image-20220731210540105

配置

spring:
  application:
    name: service-provider
  cloud:
    nacos:
      discovery:
        server-addr: 127.0.0.1:8848

启动类注解

@EnableDiscoveryClient

# 消费者

略,将在网关文章中详述。

上次更新: 2024/04/16, 22:36:36
Nexus(Maven私服)
Microservice - Spring Cloud Gateway(网关)上手

← Nexus(Maven私服) Microservice - Spring Cloud Gateway(网关)上手→

最近更新
01
iSCSI服务搭建
05-10
02
磁盘管理与文件系统
05-02
03
网络测试 - iperf3
05-02
更多文章>
Theme by Vdoing | Copyright © 2018-2025 NipGeihou | 友情链接
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式