[转帖]服务注册与发现:Nacos Discovery

服务,注册,发现,nacos,discovery · 浏览次数 : 0

小编点评

**配置项** * **Nacos Server地址**: 127.0.0.1:8848 * **Nacos Watch端口**: 8022 * **RestTemplate端口**: 8021 **加载** * **RestTemplate**: restTemplate * **负载均衡**: @LoadBalanced注解 **注册** * **RestTemplate**: restTemplate * **负载均衡**: @LoadBalanced注解 **验证** * **负载均衡配置**: @LoadBalanced注解 * **Nacos Watch端口**: 8022 * **RestTemplate端口**: 8021 **代码** ```java @Bean @LoadBalanced public RestTemplate restTemplate(RestTemplateBuilder builder) { RestTemplate restTemplate = builder.build(); return restTemplate; } @Value("\"${server.port}\") String port; @RequestMapping(\"/reduct\") public String reduct() { System.out.println("扣减库存"); return "库存-1,调用的库存服务的端口号为:" + port; } ```

正文

目录

一、概述

二、Nacos discovery——服务的注册与发现

 1. 版本关系

 2. 下载安装

(1)下载

(2)启动 

(3)浏览器访问

 三、Nacos服务注册与发现实战

1. 构建Spring Cloud Alibaba工程

(1)创建父工程

 (2)创建子项目

2. 编写测试Controller

3. 服务注册与发现的配置 

4. 验证负载均衡配置


一、概述

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 的打包方式,并引入子模块:

  1. <packaging>pom</packaging>
  2. <modules>
  3. <module>order-nacos</module>
  4. <module>stock-nacos</module>
  5. </modules>

 在子模块中指定父模块:

  1. <parent>
  2. <groupId>com.example</groupId>
  3. <artifactId>nacos-learn-parent</artifactId>
  4. <version>0.0.1-SNAPSHOT</version>
  5. </parent>

2. 编写测试Controller

在order启动类中引入RestTemplate,用于微服务之间的接口调用

  1. @SpringBootApplication
  2. public class OrderNacosApplication {
  3. public static void main(String[] args) {
  4. SpringApplication.run(OrderNacosApplication.class, args);
  5. }
  6. @Bean
  7. public RestTemplate restTemplate(RestTemplateBuilder builder) {
  8. RestTemplate restTemplate = builder.build();
  9. return restTemplate;
  10. }
  11. }

在订单的微服务模块下创建 OrderController:

  1. @RestController
  2. @RequestMapping("/order")
  3. public class OrderController {
  4. @Autowired
  5. RestTemplate restTemplate;
  6. @RequestMapping("/add")
  7. public String add() {
  8. System.out.println("下单成功!");
  9. String msg = restTemplate.getForObject("http://stock-service/stock/reduct", String.class);
  10. return "下订单了!" + msg;
  11. }
  12. }

在库存的微服务模块下创建 StockController:

  1. @RestController
  2. @RequestMapping("/stock")
  3. public class StockController {
  4. @Value("${server.port}")
  5. String port;
  6. @RequestMapping("/reduct")
  7. public String reduct() {
  8. System.out.println("扣减库存");
  9. return "库存-1,调用的库存服务的端口号为:" + port;
  10. }
  11. }

3. 服务注册与发现的配置 

订单模块Application.yml 配置:

  1. server:
  2. port: 8020 #订单服务启动的端口
  3. spring:
  4. application:
  5. name: order-service #nacos会将该名称当作服务名称
  6. cloud:
  7. nacos:
  8. server-addr: 127.0.0.1:8848 #nacos服务地址
  9. discovery:
  10. username: nacos #登录到nacos管理平台的用户名
  11. password: nacos #登录到nacos管理平台的密码
  12. namespace: public #服务的命名空间,就相当于一个文件夹,用来区分服务实例

库存模块Applicaion.yml 配置:

  1. server:
  2. port: 8021 #库存服务启动的端口号
  3. spring:
  4. application:
  5. name: stock-service #nacos会将该名称当作服务名称
  6. cloud:
  7. nacos:
  8. server-addr: 127.0.0.1:8848 #nacos服务地址
  9. discovery:
  10. username: nacos #登录到nacos管理平台的用户名
  11. password: nacos #登录到nacos管理平台的密码
  12. namespace: public #服务的命名空间,就相当于一个文件夹,用来区分服务实例

启动两个服务:

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

  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate(RestTemplateBuilder builder) {
  4. RestTemplate restTemplate = builder.build();
  5. return restTemplate;
  6. }

查看Nacos 管理面板:

可以看到两个服务以及注册到nacos。

补充:关于 Nacos Starter 更多的配置项信息

配置项Key默认值说明

服务端地址

spring.cloud.nacos.discovery.server-addr

Nacos Server 启动监听的ip地址和端口

服务名

spring.cloud.nacos.discovery.service

${spring.application.name}

给当前的服务命名

服务分组

spring.cloud.nacos.discovery.group

DEFAULT_GROUP

设置服务所处的分组

权重

spring.cloud.nacos.discovery.weight

1

取值范围 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.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.enpoint

UTF-8

地域的某个服务的入口域名,通过此域名可以动态地拿到服务端地址

是否集成Ribbon

ribbon.nacos.enabled

true

一般都设置成true即可

是否开启Nacos Watch

spring.cloud.nacos.discovery.watch.enabled

true

可以设置成false来关闭 watch

注册的IP地址类型

spring.cloud.nacos.discovery.ip-type

IPv4

可以配置IPv4和IPv6两种类型

 4. 验证负载均衡配置

        Nacos 默认使用的是 Ribbon 提供的负载均衡机制,Ribbon 属于客户端的负载均衡,默认使用的方式是轮询。

(1)在RestTemplate配置上加 @LoadBalanced注解

  1. @Bean
  2. @LoadBalanced
  3. public RestTemplate restTemplate(RestTemplateBuilder builder) {
  4. RestTemplate restTemplate = builder.build();
  5. return restTemplate;
  6. }

(2)在StockController 的/reduct接口被调用时,返回该服务的端口号

  1. @RestController
  2. @RequestMapping("/stock")
  3. public class StockController {
  4. @Value("${server.port}")
  5. String port;
  6. @RequestMapping("/reduct")
  7. public String reduct() {
  8. System.out.println("扣减库存");
  9. return "库存-1,调用的库存服务的端口号为:" + port;
  10. }
  11. }

 (3)启动两个库存服务,右键点击 Copy Configuration 选项,选择启动的端口号为8022:

就是库存服务要在多个端口启动时,这样来操作

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

 验证负载均衡:

 

 

 

 

 

 

 

文章知识点与官方知识档案匹配,可进一步学习相关知识
Java技能树首页概览113544 人正在系统学习中

与[转帖]服务注册与发现:Nacos Discovery相似的内容:

[转帖]服务注册与发现:Nacos Discovery

目录 一、概述 二、Nacos discovery——服务的注册与发现 1. 版本关系 2. 下载安装 (1)下载 (2)启动 (3)浏览器访问 三、Nacos服务注册与发现实战 1. 构建Spring Cloud Alibaba工程 (1)创建父工程 (2)创建子项目 2. 编写测试Control

[转帖]Spring Cloud Alibaba Nacos 注册中心使用教程

一. 什么是Nacos Nacos是一个更易于构建云原生应用的动态服务发现(Nacos Discovery )、服务配置(Nacos Config)和服务管理平台,集注册中心+配置中心+服务管理于一身,基本特性如下: 服务发现和服务健康监测; 动态配置服务; 动态 DNS 服务; 服务及其元数据管理

[转帖]nacos discovery和config

微服务和nacos版本都在2.x及之后。 1、discovery用于服务注册,将想要注册的服务注册到nacos中,被naocs发现。 pom引入的依赖是: yml配置文件中: 2、config用于获取nacos配置管理->配置列表下配置文件中的内容 pom引入的依赖是: 获取nacos的配置有三种方

[转帖]重写Nacos服务发现逻辑动态修改远程服务IP地址

https://www.cnblogs.com/changxy-codest/p/14632574.html 背景 还是先说下做这个的背景,开发环境上了K8S,所有的微服务都注册在K8S内的Nacos,注册地址为K8S内部虚拟IP,K8S内的服务之间相互调用没有问题,但是本机开发联调调用其他微服务就

[转帖]Nacos和Eureka的区别

Eureka架构图: Eureka架构图 1.服务注册(register):Eureka Client会通过发送REST请求的方式,向Eureka Server注册自己的服务。注册时,提供自身的元数据,比如ip地址、端口、运行状况指标、主页地址等信息。Eureka Server接收到注册请求后,就会

[转帖]k8s 服务注册与发现(一)DNS

文章目录 什么是DNS域名层级域名服务器 工作原理反向代理水平扩展集群中的 DNS......DNS劫持 什么是DNS 域名系统(英文:Domain Name System,缩写:DNS)是互联网的一项服务。它作为将域名和IP地址相互映射的一个分布式数据库,能够使人更方便地访问互联网。DNS使用UD

[转帖]k8s 服务注册与发现(三)CoreDNS

CoreDNS 作为一个加入 CNCF(Cloud Native Computing Foundation) 的服务 CoreDNS 的实现可以说的非常的简单。 介绍 整个 CoreDNS 服务都建立在一个使用 Go 编写的 HTTP/2 Web 服务器 Caddy · GitHub 上,CoreD

[转帖]10 张图搞懂服务注册发现机制

http://blog.itpub.net/70024420/viewspace-2926779/ 在微服务架构或分布式环境下,服务注册与发现技术不可或缺,这也是程序员进阶之路必须要掌握的核心技术之一,本文通过图解的方式带领大家轻轻松松掌握。 引入服务注册与发现组件的原因 先来看一个问题,假如现在我

[转帖]鹅厂微服务发现与治理巨作PolarisMesh实践-上

文章目录 概述定义核心功能组件和生态特色亮点解决哪些问题官方性能数据 架构原理资源模型服务治理基本原理服务注册服务发现 安装部署架构集群安装 SpringCloud应用接入版本兼容创建演示父项目提供者微服务示例消费者微服务示例动态配置示例 概述 定义 PolarisMesh 官网地址 https:/

[转帖]腾讯服务注册中心演进及性能优化实践

https://my.oschina.net/u/4587289/blog/5577840 导语 注册中心作为微服务架构的核心,承担服务调用过程中的服务注册与寻址的职责。注册中心的演进是随着业务架构和需求的发展而进行演进的。腾讯当前内部服务数超百万级,日调用量超过万亿次,使用着统一的注册中心 ——