【第5章】Spring Cloud之Nacos服务注册和服务发现
文章目录
- 前言
- 一、提供者
- 1. 引入依赖
- 2.配置 Nacos Server 地址
- 3. 开启服务注册
- 二、消费者
- 1. 引入依赖
- 2.配置 Nacos Server 地址
- 3. 开启服务注册
- 三、服务列表
- 四、服务发现
- 1. 获取服务列表
- 2. 测试
- 2.1 获取所有服务
- 2.2 根据服务名获取服务信息
- 五、更多配置项
- 总结
前言
本节通过实现一个简单的 echo service 演示如何在您的 Spring Cloud 项目中启用 Nacos 的服务注册和发现功能,如下图示:

一、提供者
1. 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置 Nacos Server 地址
${NACOS_SERVER_ADDR}是配置的环境变量
server:port: 9002
spring:application:name: provider-servicecloud:nacos:discovery:server-addr: ${NACOS_SERVER_ADDR}username: nacospassword: nacos
在使用 Nacos 服务发现和配置功能时,一定要配置 username 和 password 属性,否则会出现用户未找到异常!
3. 开启服务注册
package org.example.nacos.provider;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryProviderApplication {public static void main(String[] args) {SpringApplication.run(NacosDiscoveryProviderApplication.class, args);}}
二、消费者
1. 引入依赖
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>
2.配置 Nacos Server 地址
server:port: 9000
spring:application:name: consumer-servicecloud:nacos:discovery:server-addr: ${NACOS_SERVER_ADDR}username: nacospassword: nacos
3. 开启服务注册
package org.example.nacos.consumer;import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;@EnableDiscoveryClient
@SpringBootApplication
public class NacosDiscoveryConsumerApplication {public static void main(String[] args) {SpringApplication.run(NacosDiscoveryConsumerApplication.class, args);}}
三、服务列表

四、服务发现
1. 获取服务列表
我们在消费者项目中获取nacos中的服务列表,并打印出来。
package org.example.nacos.consumer.controller;import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.cloud.client.ServiceInstance;
import org.springframework.cloud.client.discovery.DiscoveryClient;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import java.util.List;/*** Create by zjg on 2024/7/15*/
@RequestMapping("/nacos/")
@RestController
public class NacosDiscoveryController {@AutowiredDiscoveryClient discoveryClient;@RequestMapping("discovery")public void discovery(){List<String> services = discoveryClient.getServices();services.forEach(System.out::println);}@RequestMapping("discovery/instance")public void discovery(@RequestParam("serviceId") String serviceId){List<ServiceInstance> instances = discoveryClient.getInstances(serviceId);instances.forEach(instance->{System.out.println(instance.getHost()+":"+instance.getPort());});}
}
新版本的@RequestParam(“serviceId”),用法略有改动,更加规范了,但是没那么灵活对开发者不是很友好!
2. 测试
2.1 获取所有服务
http://localhost:9000/nacos/discovery
consumer-service
provider-service
2.2 根据服务名获取服务信息
http://localhost:9000/nacos/discovery/instance?serviceId=provider-service
192.168.0.103:9002
五、更多配置项
| 配置项 | key | 默认值 | 说明 |
|---|---|---|---|
| 服务端地址 | spring.cloud.nacos.discovery.server-addr | ||
| 服务名 | spring.cloud.nacos.discovery.service | ${spring.application.name} | 注册到Nacos上的服务名称,默认值为应用名称 |
| 权重 | spring.cloud.nacos.discovery.weight | 1 | 取值范围 1 到 100,数值越大,权重越大 |
| 网卡名 | spring.cloud.nacos.discovery.network-interface | 当IP未配置时,注册的IP为此网卡所对应的IP地址,如果此项也未配置,则默认取第一块网卡的地址 | |
| 注册的IP地址 | spring.cloud.nacos.discovery.ip | 优先级最高 | |
| 注册的IP地址类型 | spring.cloud.nacos.discovery.ip-type | 双栈地址 | 可以配置IPv4和IPv6两种类型,如果网卡同类型IP地址存在多个,希望制定特定网段地址,可使用spring.cloud.inetutils.preferred-networks配置筛选地址 |
| 注册的端口 | spring.cloud.nacos.discovery.port | -1 | 默认情况下不用配置,会自动探测 |
| 命名空间 | spring.cloud.nacos.discovery.namespace | 常用场景之一是不同环境的注册的区分隔离,例如开发测试环境和生产环境的资源(如配置、服务)隔离等。 | |
| AccessKey | spring.cloud.nacos.discovery.access-key | ||
| SecretKey | spring.cloud.nacos.discovery.secret-key | ||
| Metadata | spring.cloud.nacos.discovery.metadata | 使用Map格式配置 | |
| 日志文件名 | spring.cloud.nacos.discovery.log-name | ||
| 集群 | spring.cloud.nacos.discovery.cluster-name | DEFAULT Nacos集群名称 | |
| 接入点 | spring.cloud.nacos.discovery.endpoint | 地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址 | |
| 是否集成LoadBalancer | spring.cloud.loadbalancer.nacos.enabled | false | |
| 是否开启Nacos Watch | spring.cloud.nacos.discovery.watch.enabled | false | 可以设置成true来开启 watch |
| 是否启用Nacos | spring.cloud.nacos.discovery.enabled | true | 默认启动,设置为false时会关闭自动向Nacos注册的功能 |
| 用户名 | spring.cloud.nacos.discovery.username | nacos | |
| 密码 | spring.cloud.nacos.discovery.password | nacos |
总结
回到顶部
中文文档
官方案例
相关文章:
【第5章】Spring Cloud之Nacos服务注册和服务发现
文章目录 前言一、提供者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 二、消费者1. 引入依赖2.配置 Nacos Server 地址3. 开启服务注册 三、服务列表四、服务发现1. 获取服务列表2. 测试2.1 获取所有服务2.2 根据服务名获取服务信息 五、更多配置项总结 前言 本节通过…...
Springboot 启动时Bean的创建与注入(一)-面试热点-springboot源码解读-xunznux
Springboot 启动时Bean的创建与注入,以及对应的源码解读 文章目录 Springboot 启动时Bean的创建与注入,以及对应的源码解读构建Web项目流程图:堆栈信息:堆栈信息简介堆栈信息源码详解1、main:10, DemoApplication (com.xun.demo)2…...
单调栈(随缘复习到了,顺手刷了)
也是不知道为什么突然又复习到单调栈了,所以顺手刷了三道题,总结一下 P6503 [COCI2010-2011#3] DIFERENCIJA 思路:这题是要求每个子区间里面的最大值和最小值的差,我们一开始想的必然是纯暴力呀,但是一看这数据&#…...
学习测试10-3自动化 web自动化
web自动化 chrome驱动下载地址: https://registry.npmmirror.com/binary.html?pathchromedriver/ https://googlechromelabs.github.io/chrome-for-testing/#stable观察Google版本,下相应的驱动 运行代码试试,成功Google就会弹出 from se…...
安防视频监控EasyCVR视频汇聚平台修改配置后无法启动的原因排查与解决
安防视频监控/视频集中存储/云存储/磁盘阵列EasyCVR平台基于云边端一体化架构,兼容性强、支持多协议接入,包括国标GB/T 28181协议、部标JT808、GA/T 1400协议、RTMP、RTSP/Onvif协议、海康Ehome、海康SDK、大华SDK、华为SDK、宇视SDK、乐橙SDK、萤石云SD…...
爬虫学习2:爬虫爬取网页的信息与图片的方法
爬虫爬取网页的信息与图片的方法 爬取人物信息 import requestshead {"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/126.0.0.0 Safari/537.36 Edg/126.0.0.0" } # 这是get请求带参数的模式…...
MySQL定时备份数据,并上传到oss
1.环境准备 1.安装阿里云的ossutil 2.安装mysql 2.编写脚本 脚本内容如下 #!/bin/bash # 数据库的配置信息,根据自己的情况进行填写 db_hostlocalhost db_usernameroot db_passwordroot db_namedb_root # oss 存贮数据的bucket地址 bucket_namerbsy-backup-buck…...
极速删除 node_modules 仅3 秒()
今天教大家如何快速删除 node_modules 依赖的一个小秘诀,告别繁琐!!! 前言 作为前端开发者,相信大家都曾经历过删除 node_modules 文件夹时的漫长等待。 尤其是在处理那些依赖库繁多的项目时,删除操作…...
vue this.$refs 动态拼接
业务需要,refs是不固定的 <vxe-grid refgridWarehouse v-bind"gridWarehouseOptions" v-if"tableHeight" :height"tableHeight":expand-config"{iconOpen: vxe-icon-square-minus, iconClose: vxe-icon-square-plus}"c…...
一次搞定!中级软件设计师备考通关秘籍
大家好,我是小欧! 今天我们来聊聊软考这个话题。要是你准备参加计算机技术与软件专业技术资格(软考),那么这篇文章就是为你量身定做的。话不多说,咱们直接进入正题。 什么是软考? 软考…...
第十六讲 python中的序列-列表简介-特点-常用方法-创建-添加-删除-访问-切片-排序-复制-反转
目录 1. 序列的本质和内存结构 2.列表 2.1 列表简介 2.2 列表的特点 2.3 列表对象的常用方法大全: 2.4 列表的创建 2.4.1 使用方括号 [] 2.4.2 使用 list() 函数 2.4.3 使用 range() 函数 2.4.3.1 range的基本用法 2.4.3.2 返回值 2.4.3.3 range的使用例子 2.4.3.4 range的使…...
大模型日报 2024-07-22
大模型日报 2024-07-22 大模型资讯 谷歌将在ICML 2024展示机器学习研究成果 摘要: 谷歌研究人员将在ICML 2024会议上展示他们在机器学习领域的探索,从理论到应用,构建解决深层问题的ML系统。 代理符号学习:优化AI系统符号组件的框架 摘要: 大…...
Electron 的open-file事件
在 Electron 中,open-file 事件是一个重要的事件,它允许开发者在应用程序已经运行的情况下,通过文件打开请求(如双击文件或在命令行中使用 open 命令打开文件)来捕获文件路径。以下是对 open-file 事件的详细解析: 触发条件 应用已经打开。用户通过双击与应用程序关联的…...
前端面试 vue 接口权限控制
接口权限目前一般采用jwt的形式来验证,没有通过的话一般返回401,跳转到登录页面重新进行登录 对于 jwt的理解 (前端接口权限的控制主要通过接口权限配置和JWT(Json Web Token)技术来实现。 首先,…...
【DevOps系列】构建Devops系统
开始介绍 那就着手开始干吧。先介绍一下我们的工具链。 主要工具:GitHub、Jenkins、Kubernetes、Ansible、Prometheus和JMeter 着手动 1. 设置GitHub作为源代码仓库 登录GitHub: 打开浏览器并访问 https://github.com,使用您的GitHub账户登录。 创建…...
ABAP打印WORD的解决方案
客户要求按照固定格式输出到WORD模板中,目前OLE和DOI研究了均不太适合用于这种需求。 cl_docx_document类可以将WORD转化为XML文件,利用替换字符串方法将文档内容进行填充同 时不破坏WORD现有格式。 首先需要将WORD的单元格用各种预定义的字符进行填充,为后续替换作准备…...
emr部署hive并适配达梦数据库
作者:振鹭 一、达梦 用户、数据库初始化 1、创建hive的元数据库 create tablespace hive_meta datafile /dm8/data/DAMENG/hive_meta.dbf size 100 autoextend on next 1 maxsize 2048;2、创建数据库的用户 create user hive identified by "hive12345&quo…...
王春城:怎么用精益思维重塑企业战略规划格局?
当下,企业战略规划的灵活性和适应性变得至关重要。传统的战略规划方法往往过于僵化和静态,难以应对市场的不确定性和变化。因此,引入精益思维来重塑企业战略规划格局,成为了许多企业寻求突破和创新的途径。具体步骤如深圳天行健企…...
git reset
git reset [--soft | --mixed | --hard] [HEAD] 表格版 原始内容reset前reset命令reset后本地工作区暂存区本地仓库本地工作区暂存区本地仓库本地工作区暂存区本地仓库READMEREADMEREADMEREADMEREADMEREADME--soft HEADREADMEREADMEREADMEa.txta.txtb.txtb.txtb.txtb.txtc.tx…...
E17.【C语言】练习:sizeof和strlen的辨析
先回顾http://t.csdnimg.cn/aYHl6 1. char acX[] "abcdefg"; char acY[] { a,b,c,d,e,f,g}; 以下说法正确的是( ) A.数组acX和数组acY等价 B.数组acX和数组acY的长度相同 C.sizeof(acX)>sizeof (acY) D.strlen (acX)>strlen (acY) 分析:…...
别再到处找DEM了!手把手教你用ArcGIS Pro + Python脚本,从NASA官网免费下载并拼接出完整的中国90米高程数据
从NASA获取中国90米高程数据的自动化解决方案 在GIS和遥感研究领域,获取高质量的数字高程模型(DEM)数据是许多项目的基础工作。然而,对于中国区域的完整覆盖、高精度且免费可用的DEM数据,研究者们常常面临获取困难。本文将介绍如何利用ArcGI…...
工程师如何运用专业技能参与人道主义项目:从思维转变到实践落地
1. 项目概述:工程师的人道主义行动倡议每年8月19日,世界人道主义日都会提醒我们关注那些在全球最艰苦、最危险地区默默奉献的人们。这个日子最初是为了纪念在履职中牺牲的人道主义工作者,如今已演变为一个更广泛的号召——庆祝那种激励全球人…...
【研报 A109】2026年脑机接口产业化专题报告:首个侵入式产品获批,医保完成赋码
摘要:脑机接口行业正迎来产业化应用的关键元年,2026年行业正式从实验室研究走向规模化商业化落地,当前行业处于导入期尾端、爆发前夜,非侵入式与半侵入式路径已率先打通商业化通道,侵入式则处于临床验证阶段。政策端&a…...
Cursor-Buddy:基于AI的Web界面语音交互与视觉引导助手
1. 项目概述与核心价值最近在捣鼓一个挺有意思的开源项目,叫cursor-buddy。简单来说,它是一个能“住”在你鼠标光标里的AI助手,专门为Web应用设计。想象一下,你在浏览一个复杂的后台管理系统或者一个数据看板,突然想找…...
从STM32到华大HC32F460:手把手移植USB HOST MSC + FatFs R0.13c(含源码对比与避坑指南)
从STM32到华大HC32F460:USB HOST MSC与FatFs移植实战全解析 1. 迁移背景与核心挑战 对于长期使用STM32的嵌入式开发者而言,切换到华大半导体HC32F460系列MCU既是一次技术升级,也面临实际移植的挑战。USB HOST MSC(Mass Storage Cl…...
【Leona】BoxId 是什么-设备指纹参数
BoxId 是什么?从 Leona.sense() 到 /v1/verdict 的可落地闭环:签名、落库、错误处理与回归验证(基于公开示例) TL;DR BoxId 不是“风险结论”,而是一次“证据报告兑换券”:端上拿 BoxId,后端换证…...
LeagueAkari英雄联盟自动化工具终极使用指南:本地化智能助手全面解析
LeagueAkari英雄联盟自动化工具终极使用指南:本地化智能助手全面解析 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾为英…...
CSS 容器查询完全指南
CSS 容器查询完全指南 引言 CSS 容器查询(Container Queries)是 CSS 规范中的一项革命性特性,它允许开发者根据容器的尺寸而非视口尺寸来应用样式。本文将深入探讨容器查询的各种用法和高级技巧。 基础概念回顾 容器查询 vs 媒体查询 特…...
机器学习之随机森林详解
摘要随机森林(Random Forest)是一种基于Bagging集成学习思想的 ensemble method,通过构建多棵决策树并综合其预测结果来实现分类和回归任务。本文详细介绍了随机森林的核心原理、关键超参数、OOB误差估计机制,以及其在特征重要性分…...
【STM32H7实战】HRTIM高分辨率定时器在数字电源与电机控制中的高级应用与HAL库配置
1. HRTIM高分辨率定时器概述 HRTIM(High-Resolution Timer)是STM32H7系列中一个强大的定时器外设,专为数字电源转换、电机控制等高性能实时控制场景设计。相比普通定时器,它的分辨率高达184ps(在400MHz主频下ÿ…...
