Spring Cloud Alibaba — Nacos 构建服务注册中心

news2024/11/25 4:31:29

文章目录

  • Nacos Server
    • 下载
    • 启动
    • 登录
    • 创建命名空间
  • Nacos Client
    • 启动样例
    • Nacos 服务发现配置项
  • 集成 OpenFeign 远程接口调用
    • 添加 OpenFeign 依赖
    • 开启 @EnableFeignClients 注解
    • 编写远程服务接口
    • 远程接口调用
  • 集成 Sentinel 熔断降级
    • 添加 Sentinel 依赖
    • 开启 Sentinel 熔断降级
    • 编写降级回调类
    • 添加 fallback 属性
  • 集成 GateWay 动态路由

image-20230531185539558

Nacos 官网:https://nacos.io

Nacos GitHub 地址:https://github.com/alibaba/nacos

spring-cloud-alibaba GitHub 地址:https://github.com/alibaba/spring-cloud-alibaba

Spring Cloud Alibaba 组件版本说明:https://github.com/alibaba/spring-cloud-alibaba/wiki/版本说明

Nacos(Naming and Configuration Service,命名和配置服务)是一个动态服务发现、配置管理和服务治理的一站式解决方案,致力于快速构建、部署和管理微服务平台。

Nacos的主要功能包括:

  1. 服务发现:Nacos提供了一个基于DNS和HTTP的服务发现机制,使得服务之间能够轻松地找到对方并建立连接。
  2. 服务治理:Nacos提供了丰富的服务治理功能,包括熔断、限流和负载均衡等,帮助您构建稳定、可靠的微服务系统。
  3. 配置管理:Nacos支持中心化、外部化和动态化的配置管理,可以为微服务应用提供实时的配置更新,允许在不重启应用的情况下更新配置。

Nacos Server

下载

查看 Spring Cloud Alibaba 的各组件版本:

Spring Cloud Alibaba VersionSentinel VersionNacos VersionRocketMQ VersionDubbo VersionSeata Version
2022.0.0.0-RC21.8.62.2.14.9.4~1.7.0-native-rc2
2021.0.5.01.8.62.2.04.9.4~1.6.1
2.2.10-RC11.8.62.2.04.9.4~1.6.1
2022.0.0.0-RC11.8.62.2.1-RC4.9.4~1.6.1
2.2.9.RELEASE1.8.52.1.04.9.4~1.5.2

进入 Nacos GitHub,点击【Tags】:

image-20230603181337178

进入对应的【Tag】,下载对应的版本文件:

image-20230603181658275

Nacos 下载完成:

image-20230603181920380

启动

将压缩文件进行解压,目录如下:

image-20230603182024857

创建数据库【nacos】:

image-20230531192910986

导入 \nacos\conf 目录下的 nacos-mysql.sql 数据库文件:

image-20230531193035556

查看数据库内容,包含和配置文件,命名空间,用户有关的数据表:

image-20230531193141057

修改 \nacos\conf 目录下的 application.properties 配置文件:

image-20230531193649273

修改启动模式,将集群模式【cluster】改为单机模式【standalone】:

image-20230531194149375

Windows 运行 nacos\bin 目录下的 startup.cmd 文件:

image-20230601124449494

登录

访问链接:http://localhost:8848/nacos,使用默认账号密码登录【nacos:nacos】:

image-20230601123900913

创建命名空间

依次点击左侧菜单【命名空间→新建命名空间】,输入表格内容,点击【确定】即可:

image-20230602200643345

Nacos Client

启动样例

创建对应版本的 SpringBoot 项目:

image-20230602194145628

选择相关依赖,如 web、Nacos Service Discovery

image-20230602195656375

Pom.xml 中依赖如下:

<properties>
  <!--spring-boot 版本-->
  <spring-boot.version>2.3.12.RELEASE</spring-boot.version>
  <!--spring-cloud-alibaba 版本-->
  <spring-cloud-alibaba.version>2.2.9.RELEASE</spring-cloud-alibaba.version>
</properties>
<dependencies>
  <!--web 依赖-->
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <!--spring-cloud-alibaba-nacos 依赖-->
  <dependency>
    <groupId>com.alibaba.cloud</groupId>
    <artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <!-- spring-boot 依赖管理-->
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-dependencies</artifactId>
      <version>${spring-boot.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
    <!-- spring-cloud-alibaba 依赖管理-->
    <dependency>
      <groupId>com.alibaba.cloud</groupId>
      <artifactId>spring-cloud-alibaba-dependencies</artifactId>
      <version>${spring-cloud-alibaba.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

YAML 配置如下:

server:
  port: 8080
spring:
  application:
    name: nacos-client-a
  cloud:
    nacos:
      server-addr: localhost:8848 # nacos server 的地址 默认localhost:8848
      username: nacos
      password: nacos

      discovery: # 注册相关配置
        namespace: 9889d187-8b66-41f9-a554-d3d0635c0ee9 # 命名空间的 id
        group: A_GROUP # 分组名称,默认为:DEFAULT_GROU

启动项目,显示 nacos 注册, 默认组 nacos-client-a 192.168.152.1:8080 注册完成

image-20230602195127665

查看 Nacos Server 中的服务列表:

image-20230602195305220

Nacos 服务发现配置项

nacos.discovery 是 Nacos 中与服务注册与发现相关的配置项前缀,包含以下配置:

配置项Key默认值说明
服务注册中心地址spring.cloud.nacos.discovery.server-addr多个地址可以使用逗号隔开
命名空间spring.cloud.nacos.discovery.namespace实现多租户的注册与发现(区分隔离)
服务名spring.cloud.nacos.discovery.service${spring.application.name}服务列表的服务名称
服务分组spring.cloud.nacos.discovery.groupDEFAULT_GROUP服务的分组信息
权重spring.cloud.nacos.discovery.weight1取值范围1-100,数值越大,权重越大
网卡名spring.cloud.nacos.discovery.network-interface当 IP 未配置时,注册的 IP 为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址
注册 IP 地址spring.cloud.nacos.discovery.ip优先级最高
注册端口spring.cloud.nacos.discovery.port-1默认情况下不用配置,会自动探测
阿里云账号spring.cloud.nacos.discovery.access-key当要上阿里云时,阿里云上面的一个云账号名
阿里云密码spring.cloud.nacos.discovery.secret-key当要上阿里云时,阿里云上面的一个云账号密码
元数据spring.cloud.nacos.discovery.metadata服务实例的元数据信息,使用 Map 格式配置
日志文件名spring.cloud.nacos.discovery.log-name

集成 OpenFeign 远程接口调用

添加 OpenFeign 依赖

添加 spring-cloud 和 spring-cloud-openfeign 依赖:

<properties>
  <!--spring-cloud 版本-->
  <spring-cloud.version>Hoxton.SR12</spring-cloud.version>
</properties>
<dependencies>
  <!--spring-cloud-openfeign 依赖-->
  <dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-openfeign</artifactId>
  </dependency>
</dependencies>
<dependencyManagement>
  <dependencies>
    <!-- spring-cloud 依赖管理-->
    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-dependencies</artifactId>
      <version>${spring-cloud.version}</version>
      <type>pom</type>
      <scope>import</scope>
    </dependency>
  </dependencies>
</dependencyManagement>

开启 @EnableFeignClients 注解

@EnableFeignClients //开启 Feign
@EnableDiscoveryClient //开启服务发现
@SpringBootApplication
public class NacosApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosApplication.class, args);
    }

}

编写远程服务接口

@FeignClient(value = "nacos-user-service") //调用服务的服务名称
public interface UserFeignService {

    @GetMapping("info") //调用的服务接口
    String getInfo();

}

远程接口调用

编写 UserController 接口调用服务:

@RestController
public class UserController {

    @Autowired
    private UserFeignService userFeignService;

    @GetMapping("userInfo")
    public String getUserInfo(){
        return userFeignService.getInfo();
    }

}

注:服务之前需要在同一个命名空间和分组下,否则不能发现服务(环境隔离)。

集成 Sentinel 熔断降级

添加 Sentinel 依赖

<!--sentinel 依赖-->
<dependency>
  <groupId>com.alibaba.cloud</groupId>
  <artifactId>spring-cloud-starter-alibaba-sentinel</artifactId>
</dependency>

开启 Sentinel 熔断降级

在 YAML 配置文件中开启 Sentinel 熔断降级:

feign:
  sentinel:
    enabled: true

编写降级回调类

编写 UserFeignService 服务的接口实现类 UserFeignFallbackService

/**
 * UserFeignService 降级回调类
 */
@Component
public class UserFeignFallbackService implements UserFeignService {
    public String getInfo() {
        return UUID.randomUUID().toString();
    }
}

注:当 UserFeignService 中的接口调用出现异常或服务提供者下线时,就会调用 UserFeignFallbackService 类中对应得方法进行降级处理。

添加 fallback 属性

UserFeignService 接口的注解 @FeignClient 上添加 fallback 属性,指定降级回调类:

@FeignClient(value = "nacos-user-service",fallback = UserFeignFallbackService.class) //调用服务的服务名称
public interface UserFeignService {

    @GetMapping("info")
    String getInfo();

}

集成 GateWay 动态路由

添加 Gateway 依赖:

<!--gateway 依赖-->
<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-gateway</artifactId>
</dependency>

YAML 文件中添加配置:

server:
  port: 8081

spring:
  application:
    name: nacos-client-b

  cloud:
    nacos:
      server-addr: localhost:8848 # nacos server 的地址
      username: nacos # Nacos 用户名
      password: nacos # Nacos 密码

      discovery: # 注册相关配置
        namespace: 9889d187-8b66-41f9-a554-d3d0635c0ee9 # 命名空间的 id
        group: A_GROUP # 分组名称,默认为:DEFAULT_GROUP

    gateway:
      discovery:
        locator:
          enabled: true # 开启动态路由
          lower-case-service-id: true

添加 @EnableDiscoveryClient 注解:

@EnableDiscoveryClient
@SpringBootApplication
public class NacosGateWayApplication {

    public static void main(String[] args) {
        SpringApplication.run(NacosGateWayApplication.class, args);
    }

}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/608853.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【数据结构每日一题】链表——单链表重排

[数据结构习题]链表——单链表重排 &#x1f449;知识点导航&#x1f48e;&#xff1a;【数据结构】线性表——顺序存储 &#x1f449;知识点导航&#x1f48e;&#xff1a;【数据结构】线性表——链式存储 &#x1f449;[王道数据结构]习题导航&#x1f48e;&#xff1a; p …

pr安装缺少VCRUNTIME140.dll怎么办?这三个修复方案可以解决

在我们安装pr的时候&#xff0c;遇到缺少VCRUNTIME140.dll怎么办&#xff1f;vcruntime140.dll是一个Windows动态链接库&#xff0c;其主要功能是为C/C编译的程序提供运行时支持。这些库包括输入/输出函数、数学函数、字符串函数等等。因此&#xff0c;如果您的计算机缺少vcrun…

【接口自动化测试】一步一步教你搭建接口环境

要做接口测试&#xff0c;我们得搭建一套本地可以运行的接口环境。这次我选择了一个搭建容易&#xff0c;适合学习的系统——学生管理系统。 Python安装 这套管理系统是Python代码写的&#xff0c;因此需要Python环境。 安装挺无脑的&#xff0c;按照我提供的安装包和方法装…

windows下PC端小程序抓包--FiddlerCharles

目录 引言 【背景说明】 【操作说明】 【总结】 引言 大家好&#xff0c;你是否曾经遇到过想要抓取Windows下PC端小程序的网络请求数据&#xff0c;但不知道该用什么工具呢&#xff1f; 今天我要介绍的Fiddler和Charles两款工具&#xff0c;可帮助你轻松切入小程序网络请…

MySQL数据库 7.图形化界面工具DataGrip基础应用教学

目录 前言&#xff1a; DataGrip安装界面&#xff1a; 利用DataGrip创建数据库&#xff1a; 利用DataGrip为数据库创建表&#xff1a; 利用datagrip修改表&#xff1a; 添加元素&#xff1a; 结束&#xff01; 前言&#xff1a; 在之前我们一直接触的是MySQL命令行语句开…

4.3 最优装载

博主简介&#xff1a;一个爱打游戏的计算机专业学生博主主页&#xff1a; 夏驰和徐策所属专栏&#xff1a;算法设计与分析 1.什么是贪心算法的最优装载问题&#xff1f; 最优装载问题&#xff08;Bin Packing Problem&#xff09;是一个经典的组合优化问题&#xff0c;涉及将一…

【Linux】-编译器-gcc/g++使用以及动态库和静态库的介绍(以及解决sudo失败的方法)

&#x1f496;作者&#xff1a;小树苗渴望变成参天大树 ❤️‍&#x1fa79;作者宣言&#xff1a;认真写好每一篇博客 &#x1f4a8;作者gitee:gitee &#x1f49e;作者专栏&#xff1a;C语言,数据结构初阶,Linux,C 如 果 你 喜 欢 作 者 的 文 章 &#xff0c;就 给 作 者 点…

iOS证书(.p12)和描述文件(.mobileprovision)申请

目录 iOS证书(.p12)和描述文件(.mobileprovision)申请文末扩展&#xff08;UDID获取、添加测试设备&#xff09; 说明&#xff1a;本文申请证书、描述文件转载自 uniapp官网   iOS证书(.p12)和描述文件(.mobileprovision)申请      官网会时不时更新&#xff0c;如有疑问&…

《Apollo 智能驾驶进阶课程》二、 高精地图

1. 高精地图与自动驾驶的关系 1.1 高精地图与自动驾驶 L3级别以上才需要高精地图 1.2 什么是高精地图 1.3 高精地图与导航地图 1.4 高精地图-基础模块 高精地图与定位模块的关系 现在主流的自动驾驶的定位方案有两种&#xff1a;一种是基于点云&#xff0c;另一种是基于C…

投票系统(前后端分离)

1.投票系统的介绍 投票系统是一种用于组织选举和投票的软件系统&#xff0c;它可以帮助政府、企业、组织和社区等各种机构进行公正、透明和高效的投票活动。投票系统的主要功能包括&#xff1a;选民身份验证、投票管理、计票和结果公布等。 选民身份验证是指投票系统可以通过…

SpringCloud Sleuth/Zipkin学习

SpringCloud Sleuth/Zipkin 文章目录 SpringCloud Sleuth/Zipkin1 Sleuth/Zipkin 简介2 Sleuth/ZipKin-搭建链路监控实例 1 Sleuth/Zipkin 简介 在微服务框架中&#xff0c;一个由客户端发起的请求在后端系统中会经过多个不同的的服务节点调用, 来协同产生最后的请求结果&…

电脑右键删除的文件如何恢复?提供了4种方法

电脑上不小心删除文件是很常见的一件事。比如在使用右键删除的情况下&#xff0c;但是&#xff0c;误删并不代表永远丧失这个文件&#xff0c;因为我们可以通过一些方法来恢复右键删除的文件。本文提供了4种方法&#xff0c;你可以根据具体的数据丢失情况选择合适的方法。 方法…

【Python】列表 List ③ ( 查询操作 / 修改操作 | 列表查询操作 List#index | 修改列表指定位置元素值 )

文章目录 一、列表查询操作1、List#index 函数简介2、代码示例 - 列表查询3、列表查询 ValueError 报错 二、修改列表指定索引元素1、语法简介2、代码示例 - 使用正向 / 反向索引修改指定元素 一、列表查询操作 1、List#index 函数简介 列表 List 查询功能 , 通过 List#index 函…

PyTorch 深度学习 || 专题一:神经网络基础

神经网络基础 神经网络是一门重要的机器学习技术。它是目前最为火热的研究方向–深度学习的基础。学习神经网络不仅可以让你掌握一门强大的机器学习方法&#xff0c;同时也可以更好地帮助你理解深度学习技术。 神经网络是一种模拟人脑的神经网络以期能够实现类人工智能的机器…

【JAVA】双向链表详解

【JAVA】双向链表详解 双向链表的定义双向链表的初步实现&#xff08;准备&#xff09;双向链表的操作一. 打印链表二. 得到链表长度三. 插入操作3.1 头插法3.2 尾插法3.3 任意位置插入 四. 删除操作4.1 删除第一次出现为key的节点&#xff08;3种情况&#xff09;4.2 删除所以…

Vue--》Vue3打造可扩展的项目管理系统后台的完整指南(四)

今天开始使用 vue3 ts 搭建一个项目管理的后台&#xff0c;因为文章会将项目的每一个地方代码的书写都会讲解到&#xff0c;所以本项目会分成好几篇文章进行讲解&#xff0c;我会在最后一篇文章中会将项目代码开源到我的GithHub上&#xff0c;大家可以自行去进行下载运行&…

保姆级别ps bate版本下载

前言&#xff1a;最近的ps bete版本在抖音也是上了热搜&#xff0c;时不时就能刷到一个&#xff0c;相信大家也知道ai带来的魅力&#xff0c;真的很强&#xff0c;那我们就开始安装教程吧。 ​过程&#xff1a; 先打开链接&#xff1a;Adobe Creative Cloud | Details and pr…

使用外部工具横向移动

Smbexe、Psexec Psexec PsExec是一种轻巧的telnet代替品&#xff0c;可让您在其他系统上执行进程&#xff0c;并为控制台应用提供完整的交互性&#xff0c;无需手动安装客户端软件。 原理&#xff1a; 1、ipc$连接&#xff0c;释放Psexesvc.exe 2、OpenSCManager打开受害者…

如何使用ChatGPT自带插件

OpenAI的插件将ChatGPT连接到第三方应用程序。这些插件使ChatGPT能够与开发者定义的API进行交互&#xff0c;增强ChatGPT的能力&#xff0c;并使其能够执行广泛的操作。插件使ChatGPT能够做如下事情&#xff1a; 获取实时信息&#xff1b;例如&#xff0c;体育比分&#xff0c…

采样率(压缩比)对OMP算法的影响

前面详细分析了OMP重构算法原理以及实现&#xff0c;本篇主要分析采样率对OMP算法的影响。 OMP重构算法的流程为 以下分析采样率对OMP算法的影响。 先对一维信号重构进行分析&#xff0c;表1是OMP算法中采样率对重构的MSE和时间的对应表格&#xff1a; 表1&#xff1a;MP算法采…