微服务介绍、使用 Nacos 实现远程调用以及 OpenFeign 的使用

1 微服务的概念

  • 区别于单体项目

  • 单体项目拆分成微服务项目的目标:高内聚、低耦合

  • 拆分思路

    • 纵向拆分:根据功能模块

    • 横向拆分:抽取可复用模块

2 微服务拆分——远程调用

背景:微服务单一职责,每个服务只有自己的功能和数据,拆分出来的模块需要用到其他模块的功能,如查询购物车时也需要查询商品信息,但是两个模块不能直接调用

  • 模拟前端向后台发送请求

  • RestTemplate:通过远程调用,发送 HTTP 请求,得到 HTTP 响应

3 服务治理

服务远程调用存在问题:

  1. 写代码时还不知道要调用的服务地址(还没启动):例如 cart-service 不知道 item-service 启动的地址 / 端口

  2. 如果知道了地址,集群模式下 item-service 部署在多台服务器上(多实例部署),开启了负载均衡,cart-service 不知道该访问哪个端口

  3. 选了一个进行访问,如果该服务挂了,怎办?

  4. 写死了访问地址,item-service 又在新的服务器 / 端口上启动了,怎么知道新启动的服务的地址?无法感知服务状态的变更

以上问题统称为 服务治理

3.1 注册中心原理

如何解决服务治理问题?1 2 3 4

三个角色

  • 每个服务既可以作为服务的调用者

  • 也可以作为服务的提供者

  • 注册中心(家政中心)

    • 服务提供者到注册中心注册服务信息

    • 服务调用者访问注册中心,订阅所需服务的信息

      • 负载均衡:随机、轮询、加权随机、加权轮询、哈希

    • 监控服务状态变更

      • 服务提供者需要与注册中心进行 心跳续约,如果服务挂了(不再发送续约消息)就会将该服务从服务注册表中移除,并向服务调用者推送变更

      • 注册中心会向服务调用者推送服务状态变更(有服务挂了、有新的服务启动)的新消息

3.2 搭建 Nacos 实现注册中心

  • Nacos 是一个注册中心组件

  • 使用 Docker 部署 Nacos 服务

  • 可以进入 Nacos 控制面板监控服务的健康状态和服务详情(如启动服务器 IP 和端口等)

3.3 服务注册

步骤

  1. 引入 nacos discovery 依赖

  2. 配置要注册的服务名称和 Nacos 的地址

  3. 启动服务实例(IDEA 的多个端口)

3.4 服务发现

步骤

  1. 引入 nacos discovery 依赖

  2. 配置 Nacos 地址

  3. 服务发现:到 Nacos 注册中心获取服务注册列表(可以使用 Spring Cloud 提供的 API)

    • 根据服务名称,获取服务实例列表

    • 负载均衡,选择一个实例进行请求

    • 获取实例的 IP 和端口,发起远程调用

3.5 治理结果

  • 服务调用者不再需要记住服务提供者的 IP 地址和端口号,而是根据服务名称 动态拉取 服务实例列表,并通过负载均衡选择随机选择一个服务实例进行调用

  • 服务挂了 ✔ 心跳续约

  • 新启动的服务 ✔ 推送变更

4 OpenFeign 的使用

1. 基本介绍

  • 声明式的 HTTP 客户端,基于 SpringMVC 的常见注解,更简单地实现 HTTP 请求的发送

2. 使用步骤

  • 引入依赖

负载均衡的实现早期用的是 Spring Cloud 的 Ribbon,现在用的是 loadbalancer

  • 项目主类 / 启动类使用注解 @EnableFeignClients 开启 OpenFeign 功能

  • 编写 FeignClient:使用 @FeignClient(value = "item-service"),@FeignClient 会将该类标记为一个 FeignClient 客户端,value 是服务名称, OpenFeign 会根据该 value 到注册中心去拉取实例列表

注意:这是一个不需要实现的接口,OpenFeign 会自动帮我们实现该接口

  • 使用 FeignClient,实现远程调用:配置好 FeignClient 接口后就可以像使用本地方法一样实现远程调用

List<ItemDTO> items = itemClient.queryItemByIds(List.of(1,2,3));

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/458351.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】缓冲区与缓冲区的刷新策略

目录 1.缓冲区基础 1.1缓冲区的刷新策略 1.1.1三种刷新策略 1.1.2.两种强制刷新策略 2.用户级语言层缓冲区 2.1.默认在显示器输出 2.2.重定向到文件输出 2.3.write调用没有显示两份的原因 3.模拟实现文件缓冲区 3.1 myFileBuffer.h 3.2 myFileBuffer.c 4.系统内核缓…

PIL Image 使用详解

文章目录 1. 各种图像处理库介绍1.1 读取数据的通道顺序1.2 Python图像处理库&#xff08;PIL、Pillow、Scikit-image、Opencv&#xff09; 2、PIL库与Pillow库的区别3 Pillow库3.1 Pillow库特点3.2 Pillow库安装 4、Pillow的Image对象&#xff08;PIL.Image&#xff09;4.1 Im…

bpmn.js一个基于Bpmn 2.0的前端工作流展示和绘制工具

bpmn.js是由开源工作流引擎camunda内部组织BPMN.IO组织开发的一款基于BPMN 2.0的工作流展示、编辑的web端工具库。由于工作流引擎activiti、flowable、camunda属于同宗分流&#xff0c;其工作流定义格式大致相同&#xff0c;所以我们可以使用bpmn.js完美融合其中任一工作流引擎…

java内部类概述及使用方法

前言&#xff1a; 打好基础&#xff0c;daydayup! 内部类 内部类概述&#xff1a; 内部类是类的五大成分之一&#xff08;成员变量&#xff0c;方法&#xff0c;构造器&#xff0c;内部类&#xff0c;代码块&#xff09;&#xff0c;如果一个类定义在另一个类的内部&#xff…

AWS创建快照定期备份

备注&#xff1a;aws有快照定期备份工具&#xff0c;名字叫【生命周期管理器】 选择实例点击创建 点击下一步后设置备份频率等 然后点击创建即可

PCIe学习笔记(1)Hot-Plug机制

文章目录 Hot-Plug InitHot Add FlowSurprise Remove FlowNPEM Flow Hot-Plug Init PCIe hot-plug是一种支持在不关机情况下从支持的插槽添加或删除设备的功能&#xff0c;PCIe架构定义了一些寄存器以支持原生热插拔。相关寄存器主要分布在Device Capabilities, Slot Capabili…

Swift Combine 发布者publisher的生命周期 从入门到精通四

Combine 系列 Swift Combine 从入门到精通一Swift Combine 发布者订阅者操作者 从入门到精通二Swift Combine 管道 从入门到精通三 1. 发布者和订阅者的生命周期 订阅者和发布者以明确定义的顺序进行通信&#xff0c;因此使得它们具有从开始到结束的生命周期&#xff1a; …

vue 实现一个持续时间定时器组件

vue 实现一个定时器组件 效果图子组件父组件 效果图 子组件 新建一个timer.vue文件 <template><span :class"{red: string > 600}">{{ string | formatDurationS }}</span> </template> <script>export default {name: timer,pro…

AD域国产替代方案,助力某金融企业麒麟信创电脑实现“真替真用”

近期收到不少企业客户反馈采购的信创PC电脑用不起来&#xff0c;影响信创改造的进度。例如&#xff0c;某金融企业积极响应国产化信创替代战略&#xff0c;购置了一批麒麟操作系统电脑。分发使用中发现了如下问题&#xff1a; • 当前麒麟操作系统电脑无法做到统一身份认证&…

推荐一款开源的跨平台划词翻译和OCR翻译软件:Pot

Pot简介 一款开源的跨平台划词翻译和OCR翻译软件 下载安装指南 根据你的机器型号下载对应版本&#xff0c;下载完成后双击安装即可。 使用教程 Pot具体功能如下&#xff1a; 划词翻译输入翻译外部调用鼠标选中需要翻译的文本&#xff0c;按下设置的划词翻译快捷键即可按下输…

格式工厂怎么转换视频格式?轻松转换!只需几个步骤

在当今数字娱乐时代&#xff0c;视频格式的广泛多样性意味着我们可能需要在不同设备和平台之间进行频繁的转换。而在众多视频转换工具中&#xff0c;格 式工厂凭借其强大的功能和简便的操作&#xff0c;成为了许多用户首选的选择之一。如果您正在寻找一种轻松而高效的方法来转换…

力扣精选算法100道——和为 K 的子数组[前缀和专题]

和为K的子数组链接 目录 第一步&#xff1a;了解题意​编辑 第二步&#xff1a;算法原理 第三步&#xff1a;代码 第一步&#xff1a;了解题意 数组中和为k的连续子数组&#xff0c;我们主要关注的是连续的&#xff0c; 比如[1,1,1],和为2的子数组有俩个&#xff0c;比如第…