详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用

👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习
🌌上期文章:首期文章
📚订阅专栏:微服务技术全家桶
希望文章对你们有所帮助

在此之前,耗时半个月,我已经将Redis进行了一个原理上的速成以及项目的制作,整个项目我觉得还是很不错的,基本已经涵盖了单结点Redis能做的所有事。而且在学习的过程中,我也将mybatis-plus、docker、nginx的反向代理、负载均衡都速成了一遍,收获还是很大的。

当然Redis的哨兵机制、分片集群这些我都还没去怎么学习,为了快点将自己的技术栈叠高一点,我直接进军微服务架构。

微服务技术栈的学习内容主要涵盖了SpringCloud、RabbitMQ、Docker、Redis、ElasticSearch、分布式等,要花上一段时间去学习,并且做一个中小型的项目。

微服务技术栈导学

  • 服务架构演变
    • 单体架构
    • 分布式架构
    • 微服务
  • 微服务技术对比
  • SpringCloud
  • 服务拆分及远程调用
    • 服务拆分
    • Demo工程
    • 远程调用

服务架构演变

微服务架构学习之前,经常做的项目是一个单体架构的。

单体架构

单体架构:将业务的所有功能集中在一个项目中开发,打成一个包部署。
优点:架构简单、部署成本低
缺点:耦合度高
单体架构肯定是不适合进行大型项目的开发的。

分布式架构

分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务。
优点:降低服务的耦合度,有利于服务的升级拓展
缺点:不同的功能都做成了服务集群,方法之间不再那么方便互相调用了,因此我们需要进行服务的治理

分布式架构要考虑以下的问题:

1、服务的拆分粒度;
2、服务集群地址的维护
3、服务之间的远程调用
4、感知服务的健康状态

微服务

到目前为止,微服务是解决分布式架构考虑问题的最佳解决方案,它是一种经过良好架构设计的分布式架构方案,微服务架构的特征:

1、单一职责:拆分粒度更小,每一个服务都对应唯一的业务能力,做到单一职责
2、面向服务:微服务对外暴露业务接口
3、自治:团队独立、技术独立、数据独立、部署独立
4、隔离性强:服务调用做好隔离、容错、降级,避免出现级联问题

总之,微服务架构非常符合我们之前学习软件工程、设计模式这些理论课过程中反复提到的高内聚、低耦合

微服务技术对比

在这里插入图片描述
可以看到,Feign是基于http请求的,只要我们是restful风格,调用和之前就差不多,学习成本会相对低很多。
学习微服务架构,比较推荐的方式就是SpringCloud+Feign或者SpringCloudAlibaba+Feign。

SpringCloud

官网地址:SpringCloud官网地址
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验,这也是它这么火热的原因。
需要注意好版本号问题:
在这里插入图片描述

服务拆分及远程调用

服务拆分

注意事项:

1、单一职责:不同微服务,不要重复开发相同业务
2、数据独立:不要访问其它微服务的数据库
3、面向服务:将自己的业务暴露为接口,供其它微服务调用

Demo工程

想要模拟一下服务的拆分,可以先自己试一下demo,查看不访问其他服务的数据库,能否实现业务之间的调用。

demo的工程代码,以及两个数据库表tb_user、tb_order都可以看我的资源去自行下载并验证,也可以直接在下面的百度网盘中下载:demo
这个demo的来源出自于黑马程序员。

导入工程,并且创建2个数据库,分别是cloud_order与cloud_order,各包含一张表(tb_order与tb_user),2张表不要创建在同一个数据库下面,要做到数据独立性,体现分布式。

自行修改配置文件,运行代码调通,都是很简单的query操作,不做解析了。
在这里插入图片描述
在这里插入图片描述

远程调用

当我们的用户想要看到订单详情表的时候,这个详情表除了要有订单的信息,还需要有购买的用户的信息,在单体架构我们很好实现这一点,只要我们能访问到用户的相关信息,那么用注解开发是很容易增加字段去注入用户信息的。
然而现在数据库是分离的,也就是说order-service无法直接访问user-service的数据库,因此,只能让订单业务去向用户业务发出请求:
在这里插入图片描述
远程调用方式分析:

1、回顾一下http请求原理,简单来说无非就是浏览器发出http请求信息,而服务中利用@GetMapping去接受请求,查询数据库后返还相应的信息给前端
2、因此可以设想让订单模块发起http请求给用户模块,用户模块查询自己的数据库后将相应数据返还给订单模块,做出拼接后即可得到订单详情表。

因此,应该思考如何使得java代码发出http请求。

Spring提供了一个工具叫做RestTemplate,专门用于在java代码中发起http请求。
1、在order-service的启动类OrderApplication中用@Bean注解注册RestTemplate:

	@Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }

2、对订单的业务做修改:

@Service
public class OrderService {

    @Resource
    private OrderMapper orderMapper;

    @Resource
    private RestTemplate restTemplate;

    public Order queryOrderById(Long orderId) {
        // 1.查询订单
        Order order = orderMapper.findById(orderId);
        // 2.查询用户,利用RestTemplate发起http请求
        String url = "http://localhost:8081/user/" + order.getUserId();
        User user = restTemplate.getForObject(url, User.class);//getForObject默认是返回json格式,如果指定返还的内容,则会自动反序列化
        //将用户注入到order中
        order.setUser(user);
        // 4.返回
        return order;
    }
}

现在已经成功查询到详情页了:
在这里插入图片描述
这篇文章就当洒洒水了,今天太累了,就摆烂了,明天调整回来。

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

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

相关文章

哈希表的实现(2):拉链法实现哈希表

一,拉链法 在使用线性探测法实现哈希表时,会发生哈希冲突。这个时候就得向后找位置给新插入的值。这个过程无疑会对哈希表的效率有很大的影响。那我们能不能通过另一种方式来实现哈希表,让哈希表不会发生哈希冲突呢?答案当然是可以…

第二十八周:文献阅读笔记(弱监督学习)+ pytorch学习

第二十八周:文献阅读笔记(弱监督学习) 摘要Abstract1. 弱监督学习1.1. 文献摘要1.2. 引言1.3. 不完全监督1.3.1. 主动学习与半监督学习1.3.2. 通过人工干预1.3.3. 无需人工干预 1.4. 不确切的监督1.5. 不准确的监督1.6. 弱监督学习的创新点 2…

Vue-14、Vue绑定style样式

1、对象写法 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>绑定css样式</title><!--引入vue--><script type"text/javascript" src"https://cdn.jsdelivr.net/npm/v…

数据结构:堆和堆排序

数据结构&#xff1a;堆和堆排序 文章目录 数据结构&#xff1a;堆和堆排序1.二叉树的存储结构1.顺序结构2.链式结构 2.堆3.堆的实现4.堆排序&#xff08;选择排序中的一类&#xff09;1. 基本思想2.代码实现 1.二叉树的存储结构 1.顺序结构 顺序结构存储就是使用数组来表示一…

ssm基于VUE.js的在线教育系统论文

摘 要 随着学习压力越来越大&#xff0c;课外参加补习班的学生越来越多。现在大多数学生采用请家教、自学、报名补习班的方式进行课外的额外学习。请家教费用昂贵&#xff0c;自学效率低&#xff0c;碰到自己不会的知识不能及时得到解达&#xff0c;报名补习班需要时间、地点的…

TinyGPT-V:2.8B参数引领轻量级多模态AI

前言 在当前多模态大型语言模型&#xff08;MLLM&#xff09;快速发展的背景下&#xff0c;TinyGPT-V的出现标志着一个重要的技术突破。这款轻量级模型以其2.8B参数的设计&#xff0c;在AI领域引起广泛关注&#xff0c;成为GPT-4V等模型的高效替代方案。 Huggingface模型下载&…

爬虫之牛刀小试(六):爬取BOSS网站招聘的内容

今天决定再次尝试一下 selenium BOSS网站 想要找到我们感兴趣的职位&#xff0c;随便举个例子吧&#xff0c;比如家教啥的 搜一下 找到我们感兴趣的内容 接着尝试用selenium模拟登录&#xff0c;如下所示&#xff1a; 接着找到对应的位置让selenium自己干就行了。 最后的…

SSM基础入门

SSM Mybatis、Spring和SpringMVC这三个框架整合在一起完成业务功能开发 文章目录 SSM5.1 流程5.2 详细步骤5.2.1 基本配置5.2.2 功能模块开发5.2.3 测试5.2.3.1 单元测试5.2.3.2 PostMan测试 5.3 统一结果封装5.3.1 概念5.3.2 实现 5.4 统一异常处理5.4.1 异常处理器的使用5.4…

统计学-R语言-4.5

文章目录 前言多变量数据多维列联表复式条形图并列箱线图R语言中取整运算主要包括以下五种&#xff1a; 点带图多变量散点图重叠散点图矩阵式散点图 练习 前言 本篇文章将继续对数据的类型做介绍&#xff0c;本片也是最后一个介绍数据的。 多变量数据 掌握描述多变量数据的分…

openssl3.2 - 官方demo学习 - server-arg.c

文章目录 openssl3.2 - 官方demo学习 - server-arg.c概述笔记备注END openssl3.2 - 官方demo学习 - server-arg.c 概述 TLS服务器, 等客户端来连接; 如果客户端断开了, 通过释放bio来释放客户端socket, 然后继续通过bio读来aceept. 笔记 对于开源工程, 不可能有作者那么熟悉…

vue前端开发自学demo,父子组件之间传递数据demo2

vue前端开发自学demo,父子组件之间传递数据demo2!实际上&#xff0c;组件之间传递数据的&#xff0c;数据类型&#xff0c;是可以多种多样的&#xff0c;下面为大家展示几个常见的数据类型&#xff0c;比如数字类型&#xff0c;数组类型&#xff0c;对象类型。 代码如下所示&a…

sublime中添加GBK编码模式

当写代码的中文注释时&#xff0c;编译代码出现如下错误&#xff1a; 解决办法&#xff0c;添加GBK模式&#xff1a; &#xff11;. 点击Preferences -> Package Control&#xff1a; 2. 在跳出来的搜索框里搜索conver, 点击ConverToUTF8 3. File左上角会多出GBK的选项 由…

PiflowX-DorisRead组件

DorisRead组件 组件说明 从Doris存储读取数据。 计算引擎 flink 有界性 目前Doris Source是有界流&#xff0c;不支持CDC方式读取。 组件分组 Doris 端口 Inport&#xff1a;默认端口 outport&#xff1a;默认端口 组件属性 名称展示名称默认值允许值是否必填描述…

【遇见Transformer】Transformer代码、原理全方位解析,相信我,看这一篇就够了!

目录 前言 预备知识 本章代码环境 关注我&#xff0c;不迷路 &#xff01; Transformer模型的结构​编辑 Transformer模型的基本原理 注意力机制 自注意力机制 两者的区别 多头注意力机制 Transformer模型的训练 Transformer模型的应用 论文地址 前言 预备知识 在…

学习python仅此一篇就够了(文件操作:读,写,追加)

python文件操作 文件编码 编码技术即&#xff1a;翻译的规则&#xff0c;记录了如何将内容翻译成二进制&#xff0c;以及如何将二进制翻译回可识别内容。 计算机中有许多可用编码&#xff1a; UTF-8 GBK BUG5 文件的读取操作 open&#xff08;&#xff09;函数 在pyth…

数据库锁表原因、排查、解决

一.场景 场景1场景2二.原因三.排查四.解决方案 一.场景 场景1 锁表通常发生在DML&#xff08; insert 、update 、delete &#xff09; A操作进行全量数据同步&#xff0c;对整个表的粒度进行上锁&#xff0c;导致B操作只能等待A操作完成才能进入插入数据。此时就出现了锁表…

【分布式技术】监控平台zabbix介绍与部署

目录 一、为什么要做监控&#xff1f; 二、zabbix是什么&#xff1f; 三、zabbix有哪些组件&#xff1f; ​编辑Zabbix 6.0 功能组件&#xff1a; ●Zabbix Server ●数据库 ●Web 界面 ●Zabbix Agent ●Zabbix Proxy ●Java Gateway 四、zabbix的工作原理&#xf…

test Property-based Testing-04-junit-quickcheck

拓展阅读 开源 Auto generate mock data for java test.(便于 Java 测试自动生成对象信息) 开源 Junit performance rely on junit5 and jdk8.(java 性能测试框架。性能测试。压测。测试报告生成。) junit-quickcheck&#xff1a;基于 JUnit 风格的属性驱动测试库 junit-qu…

对C语言的理解

1.计算机语言 就是我们人类与计算机进行交流的媒介。我们可以使用编程语言对计算机下达命令&#xff0c;从而让计算机完成我们所需要的功能。 语言 语法 逻辑 计算机语言有很多种。如&#xff1a;C 、C、Java、Go、JavaScript、Python&#xff0c;Scala等。 2.计算机语言简史…

Java基础之并发篇(二)

1、前言 本篇主要基于Java基础之并发篇&#xff08;一&#xff09;继续梳理java中关于并发相关的基础只是。本篇基于网络整理&#xff0c;和自己编辑。在不断的完善补充哦。 2、synchronized 的原理是什么? synchronized是 Java 内置的关键字&#xff0c;它提供了一种独占的…