SpringCloud实用篇(一)

1.SpringCloud

  • SpringCloud是目前国内使用最广泛的微服务框架。官网地址:Spring Cloud

  • SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验:

image-20240328195254718

  • SpringCloud与SpringBoot的版本兼任关系如下:

image-20240328195323436

2.服务拆分及远程调用

拆分注意事项

1.不同微服务,不要重复开发相同业务

2.微服务数据独立,不要访问其他微服务的数据库

3.微服务可以将自己的业务接口暴露为接口,供其他微服务调用

导入服务拆分Demo

1.导入课前资料提供的工程:cloud-demo

链接:百度网盘 请输入提取码 提取码:ksw1 2.项目结构

image-20240328195655304

3.将课前资料准备的sql导入数据库

链接:百度网盘 请输入提取码 提取码:ksw1

总结

1.微服务需要根据业务模块拆分,做到单一职责,不要重复开发相同业务

2.微服务可以将业务暴露为接口,供其他微服务使用

3.不同微服务都应该有自己独立的数据库

3.服务拆分-服务远程调用

使用远程调用方式查询到用户信息

image-20240328195926030

可以使用RestTemplate发送请求, RestTemplate 是发送各种HTTP请求,那么就可以使用 RestTemplate 发起远程http请求:

在order_service 模块中的启动配置类中:

    /**
     * 在启动配置类注入 RestTemplate bean容器
     * @return
     */
    @Bean
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }

修改查询实现方法:

@Autowired
    private RestTemplate restTemplate;
​
    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2利用RestTemplate发送Http请求,查询用户
        // 2.1 url的地址为user-service模块启动的端口,因为是向user-service发送请求
        String url = "http://localhost:8081/user/" + order.getUserId();
        // 发送请求,完成远程调用
        User user = restTemplate.getForObject(url, User.class);
        // 封装user
        order.setUser(user);
        // 4.返回
        return order;
    }
}

4.Eureka

4.1.eureka-消费者与提供者

提供者:一次业务中,被其他微服务调用的服务 (提供接口给其他微服务,接口被调用了)

消费者:一次业务中,调用其他微服务的服务(调用其他微服务提供的接口,调用别人的接口)

上面的demo中,user就是服务提供者(接口被调用),order就是服务消费者(调用了别人的接口)

image-20240328200131872

思考:服务A调用服务B,服务B调用服务C,那么服务B是什么角色?

主要是要看怎么调用

  1. 如果是服务B调用了服务C,那么服务B就是服务消费者

2.如果是服务B被服务A调用了,那么服务B就是服务提供者

总结

服务调用关系

image-20240328200257184

  • 服务提供者:暴露接口给其它微服务调用

  • 服务消费者:调用其它微服务提供的接口

  • 提供者与消费者角色其实是相对

  • 一个服务可以同时是服务提供者和服务消费者

4.2.eureka原理分析

调用出现的问题:

  1. 服务消费者该如何获取服务提供者的地址信息?

  2. 如果有多个服务提供者,消费者该如何选择?

  3. 消费者如何得知服务者的健康状态?

image-20240328200453699

4.2.1Eureka的作用

image-20240328200528201

再来回答上面第一部分的遗留问题:

1.消费者该如何获取服务提供者具体信息?

  • 服务提供者启动时向eureka注册自己的信息

  • eureka保存这些信息

  • 消费者根据服务名称向eureka拉取提供者信息

2.如果有多个服务提供者,消费者该如何选择?

  • 服务消费者利用负载均衡算法,从服务列表中挑选一个

3.消费者如何感知服务提供者健康状态?

  • 服务提供者会每隔30秒向EurekaServer发送心跳请求,报告健康状态

  • eureka会更新记录服务列表信息,心跳不正常会被剔除

  • 消费者就可以拉取到最新的信息

在Eureka架构中,微服务角色有两类:

1.EurekaServer:服务端,注册中心

  • 记录服务信息

  • 心跳监控

2.EurekaClient:客户端

Provider:服务提供者,例如案例中的 user-service

  • 注册自己的信息到EurekaServer

  • 每隔30秒向EurekaServer发送心跳

consumer:服务消费者,例如案例中的 order-service

  • 根据服务名称从EurekaServer拉取服务列表

  • 基于服务列表做负载均衡,选中一个微服务后发起远程调用

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Python中的排序算法:归并排序,选择排序和快速排序详解

排序算法是计算机科学中的一个基础且重要的概念。它用于将一组数据(如数字、字符串等)按照某种顺序(升序或降序)重新排列。在Python中,我们有许多内置的函数和库可以方便地实现排序,但理解排序算法的基本思…

Netty对Channel事件的处理以及空轮询Bug的解决

继续上一篇Netty文章,这篇文章主要分析Netty对Channel事件的处理以及空轮询Bug的解决 当Netty中采用循环处理事件和提交的任务时 由于此时我在客户端建立连接,此时服务端没有提交任何任务 此时select方法让Selector进入无休止的阻塞等待 此时selectCnt进…

企业员工培训考试系统开发方案

一、引言 在当今知识经济时代,企业对员工的综合素质和专业技能有着越来越高的要求。为了适应这一趋势,构建一个全面而高效的企业员工培训考试系统变得尤为重要。该系统旨在通过提供多样化的培训课程和全面的考核机制,促进员工持续学习和能力…

24/03/28总结

抽象类: 将共性的方法抽取到父类之后。由于每一个子类执行的内容是不一样,所以,在父类中不能确定具体的方法体。该方法就可以定义为抽象方法。 而为什么不直接在子类中定义方法:项目的完成不是一个人,如果有时忘记写方…

【教学类-40-09】A4骰子纸模制作9.0(3.47CM嵌套骰子 一条8格便于对折,表格相连 一页3个 油墨打印A4铅画纸)

作品展示 背景需求: 骰子调整到第8版,把骰子图案作成一长条,便于切割裁剪。 【教学类-40-08】A4骰子纸模制作8.0(2.97CM嵌套骰子表格相连 一页7个 油墨打印A4铅画纸)-CSDN博客文章浏览阅读929次,点赞20次…

幻兽帕鲁服务器价格表_阿里云/腾讯云/京东云/华为云报价大全

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

土壤有机质空间分布数据

土壤有机质(soil organic matter)是土壤中含碳有机化合物的总称,包括土壤固有的和外部加入的所有动植物残体及其分解产物和合成产物。主要来源于动植物及微生物残体,可分为腐殖质和非腐殖物质。一般占土壤固相总重的10%以下&#…

推荐:便宜幻兽帕鲁Palworld联机游戏服务器优惠价格表

2024年全网最全的幻兽帕鲁服务器租用价格表,阿里云幻兽帕鲁游戏服务器26元1个月、腾讯云32元一个月、京东云26元一个月、华为云24元1个月,阿腾云atengyun.com整理最新幻兽帕鲁专用4核16G、8核16G、8核32G游戏服务器租用价格表大全: 阿里云幻…

思维升级之路:观察思维深层,解锁认知新境界

目录 一、观察我们的思维习惯 二、人类有哪些思维方法 三、为什么要多使用归纳推理而不是演绎推理 四、转变思维的关键 - 觉察 怎么提升自身的认知水平?这篇文章里,作者尝试对思维模式这件事做出探讨,一起来看看,或许可以帮你…

2023年蓝桥杯省赛——矩形面积总和

目录 题目链接: 1.矩形总面积 - 蓝桥云课 (lanqiao.cn) 思路 暴力 数学杯思路 数学逻辑 难点之重合区域 代码实现 总结 题目链接: 1.矩形总面积 - 蓝桥云课 (lanqiao.cn) 思路 暴力 开幕雷击,我直接开始暴力,但是我暴力…

Java学习之方法

目录 方法 方法声明格式: 调用方式: 详细说明 示例 --方法的声明及调用 语句块 练习 方法的重载(overload) 构成条件 示例 --方法重载 递归结构 缺陷 方法 方法(method):一段用于完成特定功能的代码片段,类似于其他语…

Redis命令-List命令

4.6 Redis命令-List命令 Redis中的List类型与Java中的LinkedList类似,可以看做是一个双向链表结构。既可以支持正向检索和也可以支持反向检索。 特征也与LinkedList类似: 有序元素可以重复插入和删除快查询速度一般 常用来存储一个有序数据&#xff…

算法系列--动态规划--背包问题(2)--01背包拓展题目

💕"2024.3.28小米汽车发布"💕 作者:Lvzi 文章主要内容:算法系列–动态规划–背包问题(2)–01背包拓展题目 大家好,今天为大家带来的是算法系列--动态规划--背包问题(2)--01背包拓展题目 1.分割等和⼦集 链接: https:/…

能够解析任何编程语言的开源语法解析树 | 开源日报 No.171

tree-sitter/tree-sitter Stars: 14.6k License: MIT tree-sitter 是一个用于编程工具的增量解析系统。 该项目的主要功能、关键特性、核心优势包括: 通用性,能够解析任何编程语言高效性,能够在文本编辑器中每次按键都进行解析健壮性&…

Mysql的日志管理,备份与回复

目录 一、Mysql日志管理 1、日志的默认位置及配置文件 2、日志分类 2.1错误日志 2.2通用查询日志 2.3二进制日志 2.4慢查询日志 2.5中继日志 3、日志配置 4、日志查询 4.1查询通用日志是否开启 4.2查询二进制日志是否开启 4.3查看慢查询日志是否开启 4.4查询慢查…

web——rce,代码执行,命令执行

eval就会将里面的内容当成php来执行 ctf 第一 第二 过滤system\ 也可也怎么做 然后访问2.txt 第三(参数逃逸) 可以用这个,url中的eval是让get函数的使用,网页中的eval是为了让system中的函数起效 第四 过滤分号,因为上…

解决:PytorchStreamWriter failed writing file data

文章目录 问题内容问题分析解决思路 问题内容 今天在炼丹的时候,我发现模型跑到140步的时候保存权重突然报了个问题,详细内容如下: Traceback (most recent call last):File "/public/home/dyedd/.conda/envs/diffusers/lib/python3.8…

【Java核心能力】一篇文章了解 ZooKeeper 底层运行原理

欢迎关注公众号(通过文章导读关注:【11来了】),及时收到 AI 前沿项目工具及新技术的推送! 在我后台回复 「资料」 可领取编程高频电子书! 在我后台回复「面试」可领取硬核面试笔记! 文章导读地址…

Mysql数据库——主从复制与读写分离

目录 前言 一、主从复制 1.主从复制的定义 2.Mysql主从复制支持的类型 3.主从复制的过程 4. 主从复制出现的问题 5.解决方法 二、读写分离 1.读写分离的定义 2.读写分离的作用 3.读写分离作用场景 3.1基于程序代码内部实现 3.2基于中间代理层实现 4.主从复制与读…

Redis命令介绍

一、redis启动: 本地启动:redis-cli 远程启动:redis-cli -h host -p port -a password Redis 连接命令 1 AUTH password 验证密码是否正确 2 ECHO message 打印字符串 3 PING 查看服务是否运行 4 QUIT 关闭当前连接 5 SELECT index 切换…