服务治理:Nacos 注册中心

2024-09-05 09:20

本文主要是介绍服务治理:Nacos 注册中心,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

文章目录

  • 一、什么是服务治理
  • 二、Nacos 注册中心的核心功能 (★)
  • 三、Nacos 环境搭建
    • 3.1 本地部署
    • 3.2 服务器部署
  • 四、Nacos 应用实战


一、什么是服务治理

服务治理是微服务架构中最核心最基本的模块。⽤于实现各个微服务的⾃动化注册与发现。
服务注册:在服务治理框架中,都会构建⼀个注册中心,每个服务单元向注册中心登记自己提供服务的详细信息。并在注册中心形成⼀张服务的清单,服务注册中心需要以心跳的方式去监测清单中的服务是否可用,如果不可用,需要在服务清单中剔除不可用的服务。
服务发现:服务调⽤方向服务注册中心咨询服务,并获取所有服务的实例清单,实现对具体服务实例的访问。

在这里插入图片描述
通过上面的调用图会发现,除了微服务,还有⼀个组件是服务注册中心,它是微服务架构非常重要的⼀个组件,在微服务架构⾥主要起到了协调者的⼀个作⽤。注册中心⼀般包含如下几个功能:

  • 服务发现
    服务注册:保存服务提供者和服务调用者的信息;
    服务订阅:服务调用者订阅服务提供者的信息,注册中心向订阅者推送提供者的信息。
  • 服务健康检测
    检测服务提供者的健康情况,如果发现异常,执行服务剔除。

二、Nacos 注册中心的核心功能 (★)

Nacos的作用就是⼀个注册中心,用来管理注册上来的各个微服务。核心功能点:

  1. 服务注册Nacos Client 会通过发送 REST 请求想 Nacos Server 注册自己的服务,提供自身的元数据,比如:IP地址,端口等信息。Nacos Server 接收到注册请求后,就会把这些元数据存储到⼀个双层的内存Map中。
  2. 服务心跳:在服务注册后,Nacos Client 会维护⼀个定时心跳来维持统治 Nacos Server,说明服务⼀致处于可用状态,防止被剔除,默认 5s 发送⼀次心跳。
  3. 服务同步:Nacos Server 集群之间会相互同步服务实例,用来保证服务信息的⼀致性。
  4. 服务发现: 服务消费者(Nacos Client) 在调用服务提供的服务时,会发送⼀个 REST 请求给 Nacos Server,获取上面注册的服务清单,并且缓存在 Nacos Client 本地,同时会在 Nacos Client 本地开启⼀个定时任务拉取服务最新的注册表信息更新到本地缓存。
  5. 服务健康检查:Nacos Server 会开启⼀个定时任务来检查注册服务实例的健康情况,对于超过 15s 没有收到客户端心跳的实例会将他的 healthy 属性设置为 false (客户端服务发现时不会发现),如果某个实例超过 30s 没有收到心跳,直接剔除该实例(被剔除的实例如果恢复发送心跳则会重新注册)

在这里插入图片描述
注意:当服务启动好以后,服务订阅者通过服务发现将注册中心存储的服务信息拉取到本地缓存列表,当服务间调用时,通过网络调用,而不是通过注册中心。如:订单服务向商品服务发起请求的URL:http://product-service/product/{id},而 “product-service” 则会被替换成具体的商品服务的 IP 地址(具体替换细节,后面会详细说明)。


三、Nacos 环境搭建

3.1 本地部署

step1:安装Nacos

下载地址: https://github.com/alibaba/nacos/releases 
下载zip格式的安装包,然后进⾏解压缩操作,上课使⽤的Nacos Server版本是1.3.2

step2:启动Nacos

切换到bin目录下,并执行以下命令

startup.cmd -m standalone

3.2 服务器部署

step1:上传文件,将nacos-server-1.3.2.zip上传到/usr/local/software

step2:解压文件到指定目录

unzip /usr/local/software/nacos-server-1.3.2.zip -d /usr/local/

step3:启动nacos

sh /usr/local/nacos/bin/startup.sh -m standalone

step4:输入以下命令,查看到有nacos-server.jar进程

jps

注:服务器需要暂时关闭防火墙 systemctl stop firewalld,并可使用 firewall-cmd --state 查看防火墙状态。

具体可参考:Linux关闭防火墙命令


打开浏览器输⼊http://localhost:8848/nacos(这里演示本地),即可访问服务, 默认账号和密码都是 nacos

在这里插入图片描述


四、Nacos 应用实战

1、将商品服务注册到 Nacos

<!-- nacos客户端依赖包 -->
<dependency><groupId>com.alibaba.cloud</groupId><artifactId>spring-cloud-starter-alibaba-nacos-discovery</artifactId>
</dependency>

2、在主类上添加@EnableDiscoveryClient注解

@SpringBootApplication
@EnableDiscoveryClient
public class ProductApplication {public static void main(String[] args) {SpringApplication.run(ProductApplication .class, args);}
}

3、在application.yml中添加Nacos服务的地址

spring:cloud:nacos:discovery: server-addr: localhost:8848

4、启动服务, 观察Nacos的控制⾯板中是否有注册上来的商品微服务
在这里插入图片描述

订单服务步骤同上,最终注册中心注册如下两个服务:
在这里插入图片描述

当订单服务创建订单,需要调用商品服务,代码如下(了解):

@Service
@Slf4j
public class OrderServiceImpl implements OrderService {@Autowiredprivate OrderDao orderDao;@Autowiredprivate DiscoveryClient discoveryClient;@Autowiredprivate RestTemplate restTemplate;@Overridepublic Order createOrder(Long productId, Long userId) {// 从nacos中获取服务地址List<ServiceInstance> instances = discoveryClient.getInstances("product-service");ServiceInstance instance = instances.get(0);String url = instance.getHost() + ":" + instance.getPort();log.info("从nacos中获取到的微服务地址为:" + url);// 远程调⽤商品微服务,查询商品信息Product product = restTemplate.getForObject("http://" + url + "/product/" + productId, Product.class);log.info("查询到{}号商品的信息,内容是:{}", productId, JSON.toJSONString(product));// 创建订单并保存Order order = new Order();order.setUid(userId);order.setUsername("叩丁狼教育");order.setPid(productId);order.setName(product.getName());order.setPrice(product.getPrice());order.setNumber(1);orderDao.save(order);log.info("创建订单成功,订单信息为{}", JSON.toJSONString(order));return order;}
}

以上代码存在问题 ServiceInstance instance = instances.get(0); 代码默认商品服务只有一台机器,如果商品服务做了集群呢?显然这样做不合理,所以可以自定义访问规则:

 public Order createOrder(Long productId, Long userId) {// 从nacos中获取服务地址//⾃定义规则实现随机挑选服务List<ServiceInstance> instances = discoveryClient.getInstances("product-service");int index = new Random().nextInt(instances.size());ServiceInstance instance = instances.get(index);String url = instance.getHost() + ":" + instance.getPort();log.info("从nacos中获取到的微服务地址为:" + url);...}

效果类似如下:
在这里插入图片描述


文章参考:Java微服务商城高并发秒杀项目实战|Spring Cloud Alibaba真实项目实战+商城双11秒杀+高并发+消息+支付+分布式事物Seata

这篇关于服务治理:Nacos 注册中心的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/1138559

相关文章

解决systemctl reload nginx重启Nginx服务报错:Job for nginx.service invalid问题

《解决systemctlreloadnginx重启Nginx服务报错:Jobfornginx.serviceinvalid问题》文章描述了通过`systemctlstatusnginx.se... 目录systemctl reload nginx重启Nginx服务报错:Job for nginx.javas

Nacos客户端本地缓存和故障转移方式

《Nacos客户端本地缓存和故障转移方式》Nacos客户端在从Server获得服务时,若出现故障,会通过ServiceInfoHolder和FailoverReactor进行故障转移,ServiceI... 目录1. ServiceInfoHolder本地缓存目录2. FailoverReactorinit

Nacos集群数据同步方式

《Nacos集群数据同步方式》文章主要介绍了Nacos集群中服务注册信息的同步机制,涉及到负责节点和非负责节点之间的数据同步过程,以及DistroProtocol协议在同步中的应用... 目录引言负责节点(发起同步)DistroProtocolDistroSyncChangeTask获取同步数据getDis

跨国公司撤出在华研发中心的启示:中国IT产业的挑战与机遇

近日,IBM中国宣布撤出在华的两大研发中心,这一决定在IT行业引发了广泛的讨论和关注。跨国公司在华研发中心的撤出,不仅对众多IT从业者的职业发展带来了直接的冲击,也引发了人们对全球化背景下中国IT产业竞争力和未来发展方向的深思。面对这一突如其来的变化,我们应如何看待跨国公司的决策?中国IT人才又该如何应对?中国IT产业将何去何从?本文将围绕这些问题展开探讨。 跨国公司撤出的背景与

【区块链 + 人才服务】可信教育区块链治理系统 | FISCO BCOS应用案例

伴随着区块链技术的不断完善,其在教育信息化中的应用也在持续发展。利用区块链数据共识、不可篡改的特性, 将与教育相关的数据要素在区块链上进行存证确权,在确保数据可信的前提下,促进教育的公平、透明、开放,为教育教学质量提升赋能,实现教育数据的安全共享、高等教育体系的智慧治理。 可信教育区块链治理系统的顶层治理架构由教育部、高校、企业、学生等多方角色共同参与建设、维护,支撑教育资源共享、教学质量评估、

【区块链 + 人才服务】区块链集成开发平台 | FISCO BCOS应用案例

随着区块链技术的快速发展,越来越多的企业开始将其应用于实际业务中。然而,区块链技术的专业性使得其集成开发成为一项挑战。针对此,广东中创智慧科技有限公司基于国产开源联盟链 FISCO BCOS 推出了区块链集成开发平台。该平台基于区块链技术,提供一套全面的区块链开发工具和开发环境,支持开发者快速开发和部署区块链应用。此外,该平台还可以提供一套全面的区块链开发教程和文档,帮助开发者快速上手区块链开发。

数据治理框架-ISO数据治理标准

引言 "数据治理"并不是一个新的概念,国内外有很多组织专注于数据治理理论和实践的研究。目前国际上,主要的数据治理框架有ISO数据治理标准、GDI数据治理框架、DAMA数据治理管理框架等。 ISO数据治理标准 改标准阐述了数据治理的标准、基本原则和数据治理模型,是一套完整的数据治理方法论。 ISO/IEC 38505标准的数据治理方法论的核心内容如下: 数据治理的目标:促进组织高效、合理地

Spring 源码解读:自定义实现Bean定义的注册与解析

引言 在Spring框架中,Bean的注册与解析是整个依赖注入流程的核心步骤。通过Bean定义,Spring容器知道如何创建、配置和管理每个Bean实例。本篇文章将通过实现一个简化版的Bean定义注册与解析机制,帮助你理解Spring框架背后的设计逻辑。我们还将对比Spring中的BeanDefinition和BeanDefinitionRegistry,以全面掌握Bean注册和解析的核心原理。

基于SpringBoot的宠物服务系统+uniapp小程序+LW参考示例

系列文章目录 1.基于SSM的洗衣房管理系统+原生微信小程序+LW参考示例 2.基于SpringBoot的宠物摄影网站管理系统+LW参考示例 3.基于SpringBoot+Vue的企业人事管理系统+LW参考示例 4.基于SSM的高校实验室管理系统+LW参考示例 5.基于SpringBoot的二手数码回收系统+原生微信小程序+LW参考示例 6.基于SSM的民宿预订管理系统+LW参考示例 7.基于

Golang支持平滑升级的HTTP服务

前段时间用Golang在做一个HTTP的接口,因编译型语言的特性,修改了代码需要重新编译可执行文件,关闭正在运行的老程序,并启动新程序。对于访问量较大的面向用户的产品,关闭、重启的过程中势必会出现无法访问的情况,从而影响用户体验。 使用Golang的系统包开发HTTP服务,是无法支持平滑升级(优雅重启)的,本文将探讨如何解决该问题。 一、平滑升级(优雅重启)的一般思路 一般情况下,要实现平滑