服务治理: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

相关文章

SpringBoot服务获取Pod当前IP的两种方案

《SpringBoot服务获取Pod当前IP的两种方案》在Kubernetes集群中,SpringBoot服务获取Pod当前IP的方案主要有两种,通过环境变量注入或通过Java代码动态获取网络接口IP... 目录方案一:通过 Kubernetes Downward API 注入环境变量原理步骤方案二:通过

springboot加载不到nacos配置中心的配置问题处理

《springboot加载不到nacos配置中心的配置问题处理》:本文主要介绍springboot加载不到nacos配置中心的配置问题处理,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑... 目录springboot加载不到nacos配置中心的配置两种可能Spring Boot 版本Nacos

Nacos注册中心和配置中心的底层原理全面解读

《Nacos注册中心和配置中心的底层原理全面解读》:本文主要介绍Nacos注册中心和配置中心的底层原理的全面解读,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录临时实例和永久实例为什么 Nacos 要将服务实例分为临时实例和永久实例?1.x 版本和2.x版本的区别

如何搭建并配置HTTPD文件服务及访问权限控制

《如何搭建并配置HTTPD文件服务及访问权限控制》:本文主要介绍如何搭建并配置HTTPD文件服务及访问权限控制的问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、安装HTTPD服务二、HTTPD服务目录结构三、配置修改四、服务启动五、基于用户访问权限控制六、

Nacos日志与Raft的数据清理指南

《Nacos日志与Raft的数据清理指南》随着运行时间的增长,Nacos的日志文件(logs/)和Raft持久化数据(data/protocol/raft/)可能会占用大量磁盘空间,影响系统稳定性,本... 目录引言1. Nacos 日志文件(logs/ 目录)清理1.1 日志文件的作用1.2 是否可以删除

SpringCloud使用Nacos 配置中心实现配置自动刷新功能使用

《SpringCloud使用Nacos配置中心实现配置自动刷新功能使用》SpringCloud项目中使用Nacos作为配置中心可以方便开发及运维人员随时查看配置信息,及配置共享,并且Nacos支持配... 目录前言一、Nacos中集中配置方式?二、使用步骤1.使用$Value 注解2.使用@Configur

SpringCloud整合MQ实现消息总线服务方式

《SpringCloud整合MQ实现消息总线服务方式》:本文主要介绍SpringCloud整合MQ实现消息总线服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐... 目录一、背景介绍二、方案实践三、升级版总结一、背景介绍每当修改配置文件内容,如果需要客户端也同步更新,

linux服务之NIS账户管理服务方式

《linux服务之NIS账户管理服务方式》:本文主要介绍linux服务之NIS账户管理服务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、所需要的软件二、服务器配置1、安装 NIS 服务2、设定 NIS 的域名 (NIS domain name)3、修改主

Maven 依赖发布与仓库治理的过程解析

《Maven依赖发布与仓库治理的过程解析》:本文主要介绍Maven依赖发布与仓库治理的过程解析,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下... 目录Maven 依赖发布与仓库治理引言第一章:distributionManagement配置的工程化实践1

SpringBoot基于配置实现短信服务策略的动态切换

《SpringBoot基于配置实现短信服务策略的动态切换》这篇文章主要为大家详细介绍了SpringBoot在接入多个短信服务商(如阿里云、腾讯云、华为云)后,如何根据配置或环境切换使用不同的服务商,需... 目录目标功能示例配置(application.yml)配置类绑定短信发送策略接口示例:阿里云 & 腾