[转帖]服务注册与发现:Nacos Discovery
目录
一、概述
Nacos是一个更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。
特性:
(1)服务发现与服务健康检测
(2)动态配置服务
(3)动态 DNS 服务
(4)服务及其元数据管理
二、Nacos discovery——服务的注册与发现
Nacos Discovery Starter 可以帮助您将服务自动注册到 Nacos 服务端,并且能够动态感知和刷新某个服务实例的服务列表。除此之外,Nacos Discovery Starter 也将服务实例自身的一些元数据信息-例如 host,port,健康检查URL,主页等-注册到 Nacos 。
1. 版本关系
关于Spring Cloud Alibaba与Spring boot, Spring Cloud Alibaba 与其他微服务组件之间的版本对应关系:Home · alibaba/spring-cloud-alibaba Wiki · GitHub
这里截取部分对应关系,我使用的 Spring Cloud Alibaba 版本为 2.2.9.RELEASE。


2. 下载安装
(1)下载
Nacos 下载地址:Releases · alibaba/nacos (github.com)
这里我下载的Windows版本:

(2)启动
将压缩包放至文件夹解压即可,运行bin目录下startup.cmd脚本即可启动:


注意:这里启动的是单机模式,默认是集群模式。

(3)浏览器访问
默认用户名和密码都是 nacos

三、Nacos服务注册与发现实战
说明:这里先构建一个父工程,父工程下分别有两个微服务模块,一个是订单模块,一个是库存模块,订单要调用库存模块的接口,下面演示如何调用,以及使用Nacos进行服务的注册与发现。
1. 构建Spring Cloud Alibaba工程
(1)创建父工程


(2)创建子项目
创建订单服务模块:


创建库存服务模块:


搭建父子关系:
更改父工程 pom.xml 的打包方式,并引入子模块:
-
<packaging>pom</packaging>
-
<modules>
-
<module>order-nacos</module>
-
<module>stock-nacos</module>
-
</modules>
在子模块中指定父模块:
-
<parent>
-
<groupId>com.example</groupId>
-
<artifactId>nacos-learn-parent</artifactId>
-
<version>0.0.1-SNAPSHOT</version>
-
</parent>
2. 编写测试Controller
在order启动类中引入RestTemplate,用于微服务之间的接口调用
-
@SpringBootApplication
-
public class OrderNacosApplication {
-
public static void main(String[] args) {
-
SpringApplication.run(OrderNacosApplication.class, args);
-
}
-
-
@Bean
-
public RestTemplate restTemplate(RestTemplateBuilder builder) {
-
RestTemplate restTemplate = builder.build();
-
return restTemplate;
-
}
-
}
在订单的微服务模块下创建 OrderController:
@RestController @RequestMapping("/order") public class OrderController { @Autowired RestTemplate restTemplate; @RequestMapping("/add") public String add() { System.out.println("下单成功!"); String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class); return "下订单了!" + msg; } }
在库存的微服务模块下创建 StockController:
-
@RestController
-
@RequestMapping("/stock")
-
public class StockController {
-
-
@Value("${server.port}")
-
String port;
-
-
@RequestMapping("/reduct")
-
public String reduct() {
-
System.out.println("扣减库存");
-
return "库存-1,调用的库存服务的端口号为:" + port;
-
}
-
}
3. 服务注册与发现的配置
订单模块Application.yml 配置:
-
server:
-
port: 8020 #订单服务启动的端口
-
spring:
-
application:
-
name: order-service #nacos会将该名称当作服务名称
-
cloud:
-
nacos:
-
server-addr: 127.0.0.1:8848 #nacos服务地址
-
discovery:
-
username: nacos #登录到nacos管理平台的用户名
-
password: nacos #登录到nacos管理平台的密码
-
namespace: public #服务的命名空间,就相当于一个文件夹,用来区分服务实例
库存模块Applicaion.yml 配置:
-
server:
-
port: 8021 #库存服务启动的端口号
-
spring:
-
application:
-
name: stock-service #nacos会将该名称当作服务名称
-
cloud:
-
nacos:
-
server-addr: 127.0.0.1:8848 #nacos服务地址
-
discovery:
-
username: nacos #登录到nacos管理平台的用户名
-
password: nacos #登录到nacos管理平台的密码
-
namespace: public #服务的命名空间,就相当于一个文件夹,用来区分服务实例
启动两个服务:

访问浏览器测试调用接口是否成功:

-
@Bean
-
@LoadBalanced
-
public RestTemplate restTemplate(RestTemplateBuilder builder) {
-
RestTemplate restTemplate = builder.build();
-
return restTemplate;
-
}
查看Nacos 管理面板:
可以看到两个服务以及注册到nacos。

补充:关于 Nacos Starter 更多的配置项信息
| 配置项 | Key | 默认值 | 说明 |
|---|---|---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
4. 验证负载均衡配置
Nacos 默认使用的是 Ribbon 提供的负载均衡机制,Ribbon 属于客户端的负载均衡,默认使用的方式是轮询。
(1)在RestTemplate配置上加 @LoadBalanced注解
-
@Bean
-
@LoadBalanced
-
public RestTemplate restTemplate(RestTemplateBuilder builder) {
-
RestTemplate restTemplate = builder.build();
-
return restTemplate;
-
}
(2)在StockController 的/reduct接口被调用时,返回该服务的端口号
-
@RestController
-
@RequestMapping("/stock")
-
public class StockController {
-
-
@Value("${server.port}")
-
String port;
-
-
@RequestMapping("/reduct")
-
public String reduct() {
-
System.out.println("扣减库存");
-
return "库存-1,调用的库存服务的端口号为:" + port;
-
}
-
}
(3)启动两个库存服务,右键点击 Copy Configuration 选项,选择启动的端口号为8022:
就是库存服务要在多个端口启动时,这样来操作


可以看到在Nacos服务列表中,stock-service多了一个实例:

验证负载均衡:



[转帖]服务注册与发现:Nacos Discovery的更多相关文章
- Alibaba Nacos 学习(三):Spring Cloud Nacos Discovery - FeignClient,Nacos 服务注册与发现
Alibaba Nacos 学习(一):Nacos介绍与安装 Alibaba Nacos 学习(二):Spring Cloud Nacos Config Alibaba Nacos 学习(三):Spr ...
- Spring Cloud Alibaba基础教程:使用Nacos实现服务注册与发现
自Spring Cloud Alibaba发布第一个Release以来,就备受国内开发者的高度关注.虽然Spring Cloud Alibaba还没能纳入Spring Cloud的主版本管理中,但是凭 ...
- Spring Cloud Alibaba | Nacos服务注册与发现
目录 Spring Cloud Alibaba | Nacos服务注册与发现 1. 服务提供者 1.1 pom.xml项目依赖 1.2 配置文件application.yml 1.3 启动类Produ ...
- Spring Cloud Alibaba(一) 如何使用nacos服务注册和发现
Nacos介绍 Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性集,帮助您快速实现动态服务发现.服务配置.服务元数据及流量管理. Nacos 帮助您更敏捷和容易地构 ...
- nacos 的服务注册与发现
nacos的服务注册于发现. 这个要求服务统一注册到注册中心,然后调用的时候就不需要通过ip来调用,直接通过服务名即可. 服务提供者 pom.xml配置,需要spring-cloud-starter- ...
- Spring Cloud Alibaba 实战 之 Nacos 服务注册和发现
服务注册与发现,服务发现主要用于实现各个微服务实例的自动化注册与发现,是微服务治理的核心,学习 Spring Cloud Alibaba,首先要了解框架中的服务注册和发现组件——Nacos. 一.Sp ...
- 2021升级版微服务教程4—Nacos 服务注册和发现
2021升级版SpringCloud教程从入门到实战精通「H版&alibaba&链路追踪&日志&事务&锁」 默认文件1610014380163 教程全目录「含视 ...
- Spring Cloud Alibaba Nacos 服务注册与发现功能实现!
Nacos 是 Spring Cloud Alibaba 中一个重要的组成部分,它提供了两个重要的功能:服务注册与发现和统一的配置中心功能. 服务注册与发现功能解决了微服务集群中,调用者和服务提供者连 ...
- Nacos服务注册与发现的2种实现方法!
Spring Cloud Alibaba 技术体系中的 Nacos,提供了两个重要的功能:注册中心(服务注册与发现)功能和配置中心功能. 其中注册中心解决了微服务调用中,服务提供者和服务调用者的解耦, ...
- Spring Cloud进阶之路 | 一:服务注册与发现(nacos)
转载请注明作者及出处: 作者:银河架构师 原文链接:https://www.cnblogs.com/luas/p/12068846.html 1.版本 最新稳定版本为1.1.4,也可以从发版说明.博客 ...
随机推荐
- AI 图像自动补全 Uncrop 工具介绍
ClipDrop Uncrop是一款基于AI的图像自动补全工具,由StabilityAI旗下的Clipdrop开发.通过利用StableDiffusionXL开发的算法和深度学习技术,Uncrop可以 ...
- 神经网络基础篇:关于 python_numpy 向量的说明(A note on python or numpy vectors)
关于 python_numpy 向量的说明 主要讲Python中的numpy一维数组的特性,以及与行向量或列向量的区别.并说一下在实际应用中的一些小技巧,去避免在coding中由于这些特性而导致的bu ...
- 云小课 | 守护网络安全不是问题,iptables的四表五链为你开启“八卦阵”
摘要:担心网络基本安全?iptables八卦阵为您守护!本文带您一起了解iptables的相关知识. 网络世界就和现实世界一样,总是会有些不怀好意的"人"出现,扫扫你的端口啊,探测 ...
- Mysql开发实践:error while loading shared libraries: libaio解决方案
摘要:Mysql出现问题:error while loading shared libraries: libaio解决方案. 本文分享自华为云社区<Mysql出现问题:error while l ...
- 9月活动回顾(免费领取PPT)|火山引擎DataLeap、ByteHouse多位专家带来DataOps、实时计算等前沿技术分享!
更多技术交流.求职机会,欢迎关注字节跳动数据平台微信公众号,回复[1]进入官方交流群 在上月举行的火山引擎开发者社区 Meetup 第12期暨超话数据专场<数智化转型背景下的火山引擎大数据技 ...
- Python 获取控制台输入的值
获取控制台输入参数 if __name__ == '__main__': while 1: question = input('用户:') answer = "你的问题是:" + ...
- PPT 商务报告,如何去表现客户LOGO
PPT 商务报告,如何去表现客户LOGO LOGO 如何下载 LOGO 如何展示 矩阵排列 删除背景,变成白色 删除背景 设置透明度 AI 软件做成矢量图 LOGO 转色法
- PPT 动态迷幻图谱
迷幻动画的本质拆解 插件: islide + 软件: PowerPoint https://www.islide.cc/ 圆型 画一个正圆,无填充色,边框 2.25磅 左边红色.右边黄色.中间两个透明 ...
- 大数据-业务数据采集-FlinkCDC DebeziumSourceFunction via the 'serverTimezone' configuration property
Caused by: org.apache.kafka.connect.errors.ConnectException: Error reading MySQL variables: The serv ...
- django读取数据库导出excel
路由 path(r'^export/xls/$', views.export_excel, name='export_excel'), 函数 import xlwt from django.http ...
