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

相关文章

Linux上设置Ollama服务配置(常用环境变量)

《Linux上设置Ollama服务配置(常用环境变量)》本文主要介绍了Linux上设置Ollama服务配置(常用环境变量),Ollama提供了多种环境变量供配置,如调试模式、模型目录等,下面就来介绍一... 目录在 linux 上设置环境变量配置 OllamPOgxSRJfa手动安装安装特定版本查看日志在

SpringCloud之LoadBalancer负载均衡服务调用过程

《SpringCloud之LoadBalancer负载均衡服务调用过程》:本文主要介绍SpringCloud之LoadBalancer负载均衡服务调用过程,具有很好的参考价值,希望对大家有所帮助,... 目录前言一、LoadBalancer是什么?二、使用步骤1、启动consul2、客户端加入依赖3、以服务

Spring Cloud之注册中心Nacos的使用详解

《SpringCloud之注册中心Nacos的使用详解》本文介绍SpringCloudAlibaba中的Nacos组件,对比了Nacos与Eureka的区别,展示了如何在项目中引入SpringClo... 目录Naacos服务注册/服务发现引⼊Spring Cloud Alibaba依赖引入Naco编程s依

Nginx配置系统服务&设置环境变量方式

《Nginx配置系统服务&设置环境变量方式》本文介绍了如何将Nginx配置为系统服务并设置环境变量,以便更方便地对Nginx进行操作,通过配置系统服务,可以使用系统命令来启动、停止或重新加载Nginx... 目录1.Nginx操作问题2.配置系统服android务3.设置环境变量总结1.Nginx操作问题

springboot的调度服务与异步服务使用详解

《springboot的调度服务与异步服务使用详解》本文主要介绍了Java的ScheduledExecutorService接口和SpringBoot中如何使用调度线程池,包括核心参数、创建方式、自定... 目录1.调度服务1.1.JDK之ScheduledExecutorService1.2.spring

Android 悬浮窗开发示例((动态权限请求 | 前台服务和通知 | 悬浮窗创建 )

《Android悬浮窗开发示例((动态权限请求|前台服务和通知|悬浮窗创建)》本文介绍了Android悬浮窗的实现效果,包括动态权限请求、前台服务和通知的使用,悬浮窗权限需要动态申请并引导... 目录一、悬浮窗 动态权限请求1、动态请求权限2、悬浮窗权限说明3、检查动态权限4、申请动态权限5、权限设置完毕后

Go路由注册方法详解

《Go路由注册方法详解》Go语言中,http.NewServeMux()和http.HandleFunc()是两种不同的路由注册方式,前者创建独立的ServeMux实例,适合模块化和分层路由,灵活性高... 目录Go路由注册方法1. 路由注册的方式2. 路由器的独立性3. 灵活性4. 启动服务器的方式5.

TP-Link PDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务

《TP-LinkPDDNS服将于务6月30日正式停运:用户需转向第三方DDNS服务》近期,路由器制造巨头普联(TP-Link)在用户群体中引发了一系列重要变动,上个月,公司发出了一则通知,明确要求所... 路由器厂商普联(TP-Link)上个月发布公告要求所有用户必须完成实名认证后才能继续使用普联提供的 D

微服务架构之使用RabbitMQ进行异步处理方式

《微服务架构之使用RabbitMQ进行异步处理方式》本文介绍了RabbitMQ的基本概念、异步调用处理逻辑、RabbitMQ的基本使用方法以及在SpringBoot项目中使用RabbitMQ解决高并发... 目录一.什么是RabbitMQ?二.异步调用处理逻辑:三.RabbitMQ的基本使用1.安装2.架构

Java中使用Java Mail实现邮件服务功能示例

《Java中使用JavaMail实现邮件服务功能示例》:本文主要介绍Java中使用JavaMail实现邮件服务功能的相关资料,文章还提供了一个发送邮件的示例代码,包括创建参数类、邮件类和执行结... 目录前言一、历史背景二编程、pom依赖三、API说明(一)Session (会话)(二)Message编程客