当前位置: 首页 > news >正文

从零部署Nacos:替代Eureka的服务注册与服务发现基础教程

一、Nacos 简介

        Nacos 是一个开源的动态服务发现、配置管理和服务管理平台,由阿里巴巴开发并贡献给开源社区。它支持服务注册与发现动态配置管理服务健康监测等功能,适用于微服务架构和云原生环境

核心功能

服务发现与注册
        Nacos 允许服务实例注册到中心服务器,其他服务可以通过查询 Nacos 发现并调用这些实例。支持 DNS 和 RPC 两种服务发现模式

动态配置管理
        提供配置中心功能,支持配置的发布、更新、删除和实时推送。配置变更时,客户端无需重启即可生效,适合多环境配置管理

服务健康监测
        通过心跳机制检测服务健康状态,自动剔除异常实例,保证服务调用的可靠性

命名空间与分组
        支持通过命名空间(Namespace)和分组(Group)隔离不同环境或业务的服务与配置,实现多租户管理

        作为 Eureka 的替代,Nacos 可以说是目前国内开发者的首选

二、Nacos的安装

        下载地址:https://github.com/alibaba/nacos/releases/tag/2.2.3

        下载并解压上述红框内任意一个即可

2.1、Windows

2.1.1、解压

        将下载好的压缩包解压至任意文件即可

目录介绍:

        bin:

                startup.cmd - Windows 平台启动脚本

                startup.sh - Linux 平台启动脚本

                shutdown.cmd - Windows 平台停止脚本

                shutdown.sh - Linux 平台停止脚本

        conf:

                Nacos 配置文件目录

        target:

                存放Nacos应用 jar 包的目录

2.1.2、修改为单机模式

        注意此模式下,是运行不了的,会一直闪退,所以我们把此处集群模式更改为单机模式

2.1.3、启动Nacos

        修改为单机模式后尝试启动:

        然后访问:http://127.0.0.1:8848/nacos/ 出现下图界面标识启动成功

        启动 Nacos 后,系统会在当前目录下自动生成一个 logs 文件夹。错误日志的具体路径为:logs/nacos.log,可根据错误日志分辨失败的原因,主要有以下几种:

        (1)未修改为单机模式

                        按照上方更改为单机模式即可

        (2)8848端口号被占用

                        更改端口号或者杀掉端口号为8848的进程

                        修改文件:${Nacos目录}/conf/application.properties

        (3)未设置JAVA_HOME 环境变量

2.2、Linux

2.2.1、上传压缩包

        创建好要上传的目录,直接将下载好的压缩包拖至Xshell命令台中,没有解压过文件的话,要先下载一下 unzip 命令:

apt-get install unzip

        然后解压安装包并查看:

unzip nacos-server-2.2.3.zip

2.2.2、单机模式启动

        进入/nacos/bin目录,运行下述指令(Ubuntu系统):

注意:运行前需要注意Nacos默认的启动端口号8848无其他进程占用,另外云服务器要对该端口号进行开放

bash startup.sh -m standalone//CenterOS使⽤: sh startup.sh -m standalone 

        启动成功后,访问Nacos链接: http://公网IP:8848/nacos 显示如下界面即启动成功

三、Nacos开箱即用

        Nacos是Spring Cloud Alibaba 的核心组件,遵循Spring Cloud定义的服务注册与发现规范;因此从微服务架构的角度来看,使用NacosEureka在功能上基本一致

两者的主要区别在于:

  1. 部署方式:Eureka需要自行搭建服务,而Nacos已提供完整的服务组件,开箱即用
  2. 技术栈:二者的依赖配置和参数设置存在差异

3.1、服务注册 / 服务发现

        此处项目内容与上篇Eureka编写的项目无关,也无继续使用关系,系两个相同的初始文件

3.1.1、引入alibaba依赖

        在父项目pom对应处,引入Spring Cloud Alibaba 依赖并刷新 maven

<properties>
<spring-cloud-alibaba.version>2022.0.0.0-RC2</spring-cloud-alibaba.version>
</properties>
<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>

💡请注意:Spring Boot 和 Spring Cloud 版本存在对应关系。Spring Cloud Alibaba 同样遵循 Spring Cloud 的版本规范,引入依赖时务必确认各组件版本匹配

Spring Cloud Alibaba 与 Spring Cloud 的版本对应关系请参考官方文档: 

https://sca.aliyun.com/zh-cn/docs/2022.0.0.0/overview/version-explain/

版本选择在兼容范围内可自由调整

3.1.2、引入Nacos依赖

order-serviceproduct-service 中引入nacos依赖

<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

引入负载均衡Load Balance)依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
3.1.3、修改配置

        配置Nacos服务端地址和服务名(注意order-service项目中把name改为order-service):

springapplication:name: product-servicecloud:nacos:discovery:server-addr: 公网IP:8848

        也可修改为本地Nacos服务器地址:127.0.0.1:8848

3.1.4、远程调用
@Service
public class OrderService {@Autowiredprivate OrderMapper orderMapper;@Autowiredprivate RestTemplate restTemplate;public OrderInfo selectOrderById(Integer orderId) {OrderInfo orderInfo = orderMapper.selectOrderById(orderId);String url="http://product-service/product/"+orderInfo.getProductId();ProductInfo productInfo = restTemplate.getForObject(url, ProductInfo.class);orderInfo.setProductInfo(productInfo);return orderInfo;}
}

        将订单服务调用商品信息的URL中写死的 127.0.0.1:9090 换成调用的服务名称 product_service

        为 RestTemplate 添加负载均衡注解 @LoadBalanced

@Configuration
public class BeanConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}

        @LoadBalanced 是Spring Cloud提供的一个注解,用于为RestTemplate添加客户端负载均衡能力。通过该注解,RestTemplate可以自动将请求分发到多个服务实例中,实现负载均衡

3.1.5、测试

        启动两个服务后,在Nacos 管理界面可以观察到 order-serviceproduct-service 均已成功注册

        测试负载均衡:

        按照相同步骤,创建第二个端口号为9092的程序,同时以上运行四个服务:

        那么我们多次访问订单服务,观察请求会不会分配到不同的商品服务实例:127.0.0.1:8080/order/1

3.2、常见问题

3.2.1、java.net.UnknownHostException

        检查是否已添加 LoadBalance 依赖

<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-loadbalancer</artifactId>
</dependency>
3.2.2、服务注册失败

        可能没有报错日志,需要检查Spring Cloud Alibaba版本是否正确

版本发布说明 | Spring Cloud Alibabahttps://sca.aliyun.com/zh-cn/docs/2022.0.0.0/overview/version-explain/

3.2.3、Client not connected, current status:STARTING

        Nacos 2.0版本新增了gRPC通信支持,需要额外开放两个端口: (基于主端口8848的偏移量1000和1001)

                9948端口:8848+1000

                9949端口:8848+1001


        另一种情况为,之前使用过Nacos并且进行远程调用,可能会导致3.2.3报错信息,导致注册的服务启动失败,此时我们尝试删除 /nacos/data/protocol 文件即可

        本篇介绍了Nacos的下载方法、跨平台部署步骤、配置修改以及服务注册与实现等内容。在后续章节中,我们将继续深入探讨Nacos的内置功能特性

http://www.lryc.cn/news/618259.html

相关文章:

  • WPS文字和Word:不只是表格,段落也可以排序
  • 文字转语音 edge_tts
  • 微内核与插件化设计思想及其在前端项目中的应用
  • PostgreSQL 范围、空间唯一性约束
  • 用 Apache Iceberg 与 Apache Spark 在 Google Cloud 打造高性能、可扩展的数据湖仓
  • Flink运行时的实现细节
  • SQL 语言分类
  • Spark 运行流程核心组件(一)作业提交
  • 数据量暴涨时,抓取架构该如何应对?
  • 开发npm包【详细教程】
  • Bevy渲染引擎核心技术深度解析:架构、体积雾与Meshlet渲染
  • C++Linux八股
  • 08--深入解析C++ list:高效操作与实现原理
  • K8S 节点初始化一键脚本(禁用 SELinux + 关闭 swap + 开启 ipvs 亲测实用)
  • 微前端架构:原理、场景与实践案例
  • 前端JS处理时间,适用于聊天、操作记录等(包含刚刚、x分钟前、x小时前、x天前)
  • Windows已经安装了一个MySQL8,通过修改配置文件的端口号跑2个或多个Mysql服务方法,并注册为系统服务
  • lesson36:MySQL从入门到精通:全面掌握数据库操作与核心原理
  • 嵌入式系统学习Day17(文件编程)
  • 项目实战2——LAMP_LNMP实践
  • 智能化评估体系:数据生产、在线化与自动化的三重奏
  • 解锁 Appium Inspector:移动端 UI 自动化定位的利器
  • 【论文阅读】一种基于经典机器学习的肌电下肢意图检测方法,用于人机交互系统
  • Secure CRT做代理转发
  • 【element树组件】el-tree实现连接线及hover编辑效果
  • ip归属地批量查询脚本
  • 视频输入输出模块介绍和示例
  • 【Node.js从 0 到 1:入门实战与项目驱动】2.1 安装 Node.js 与 npm(Windows/macOS/Linux 系统的安装步骤)
  • history命令增强记录执行时间与登录IP
  • 线性代数 · 矩阵 | 最小多项式