服务注册与发现:Nacos Discovery
创始人
2024-05-13 02:14:47
0

目录

一、概述

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

pom
order-nacosstock-nacos

 在子模块中指定父模块:

    com.examplenacos-learn-parent0.0.1-SNAPSHOT

2. 编写测试Controller

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

@SpringBootApplication
public class OrderNacosApplication {public static void main(String[] args) {SpringApplication.run(OrderNacosApplication.class, args);}@Beanpublic RestTemplate restTemplate(RestTemplateBuilder builder) {RestTemplate restTemplate = builder.build();return restTemplate;}
}

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

@RestController
@RequestMapping("/order")
public class OrderController {@AutowiredRestTemplate 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@LoadBalancedpublic RestTemplate restTemplate(RestTemplateBuilder builder) {RestTemplate restTemplate = builder.build();return restTemplate;}

查看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注解

    @Bean@LoadBalancedpublic 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多了一个实例:

 验证负载均衡:

 

 

 

 

 

 

 

相关内容

热门资讯

保存时出现了1个错误,导致这篇... 当保存文章时出现错误时,可以通过以下步骤解决问题:查看错误信息:查看错误提示信息可以帮助我们了解具体...
汇川伺服电机位置控制模式参数配... 1. 基本控制参数设置 1)设置位置控制模式   2)绝对值位置线性模...
不能访问光猫的的管理页面 光猫是现代家庭宽带网络的重要组成部分,它可以提供高速稳定的网络连接。但是,有时候我们会遇到不能访问光...
不一致的条件格式 要解决不一致的条件格式问题,可以按照以下步骤进行:确定条件格式的规则:首先,需要明确条件格式的规则是...
本地主机上的图像未显示 问题描述:在本地主机上显示图像时,图像未能正常显示。解决方法:以下是一些可能的解决方法,具体取决于问...
表格列调整大小出现问题 问题描述:表格列调整大小出现问题,无法正常调整列宽。解决方法:检查表格的布局方式是否正确。确保表格使...
表格中数据未显示 当表格中的数据未显示时,可能是由于以下几个原因导致的:HTML代码问题:检查表格的HTML代码是否正...
Android|无法访问或保存... 这个问题可能是由于权限设置不正确导致的。您需要在应用程序清单文件中添加以下代码来请求适当的权限:此外...
【NI Multisim 14...   目录 序言 一、工具栏 🍊1.“标准”工具栏 🍊 2.视图工具...
银河麒麟V10SP1高级服务器... 银河麒麟高级服务器操作系统简介: 银河麒麟高级服务器操作系统V10是针对企业级关键业务...