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

这篇具有很好参考价值的文章主要介绍了详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

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

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

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

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

服务架构演变

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

单体架构

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

分布式架构

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

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

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

微服务

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

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

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

微服务技术对比

详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用,微服务技术全家桶,spring cloud,微服务,spring,RestTemplate
可以看到,Feign是基于http请求的,只要我们是restful风格,调用和之前就差不多,学习成本会相对低很多。
学习微服务架构,比较推荐的方式就是SpringCloud+Feign或者SpringCloudAlibaba+Feign。

SpringCloud

官网地址:SpringCloud官网地址
SpringCloud集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用体验,这也是它这么火热的原因。
需要注意好版本号问题:
详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用,微服务技术全家桶,spring cloud,微服务,spring,RestTemplate

服务拆分及远程调用

服务拆分

注意事项:

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

Demo工程

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

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

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

自行修改配置文件,运行代码调通,都是很简单的query操作,不做解析了。
详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用,微服务技术全家桶,spring cloud,微服务,spring,RestTemplate
详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用,微服务技术全家桶,spring cloud,微服务,spring,RestTemplate

远程调用

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

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;
    }
}

现在已经成功查询到详情页了:
详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用,微服务技术全家桶,spring cloud,微服务,spring,RestTemplate
这篇文章就当洒洒水了,今天太累了,就摆烂了,明天调整回来。文章来源地址https://www.toymoban.com/news/detail-802081.html

到了这里,关于详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 微服务服务拆分和远程调用

    单体架构:简单方便,高度耦合,扩展性差,适合小型项目。例如:学生管理系统 分布式架构:松耦合,扩展性好,但架构复杂,难度大。适合大型互联网项目,例如:京东、淘宝 微服务:一种良好的分布式架构方案 ①优点:拆分粒度更小、服务更独立、耦合度更低 ②缺点

    2024年02月13日
    浏览(36)
  • 服务拆分及远程调用

    分布式架构都离不开服务的拆分,微服务也是一样。 不同微服务,不要重复开发相同业务 微服务数据独立,不要访问其它微服务的数据库 微服务可以将自己的业务暴露为接口,供其它微服务调用         以前时,我们将服务启动之后,可以使用浏览发送http请求来访问服务

    2024年01月17日
    浏览(42)
  • 【微服务】SpringCloud之Feign远程调用

    🏡浩泽学编程 :个人主页  🔥 推荐专栏 :《深入浅出SpringBoot》《java对AI的调用开发》               《RabbitMQ》《Spring》《SpringMVC》《项目实战》 🛸学无止境,不骄不躁,知行合一 使用Feign远程调用代替RestTemplate远程调用。 使用RestTemplate发起远程调用: 虽然在引

    2024年04月15日
    浏览(31)
  • SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用

    目录 一, 服务架构的演变 1.1 单体架构 1.2 分布式架构 1.3 微服务 1.4 SpringCloud 二, 服务拆分和远程调用 2,1 服务拆分原则 2.2 服务拆分示例 2.3 创建相应数据库  2.4 实现远程调用示例 1, 更改需求 2, 注册RestTemplate实现远程调用  2.5 服务消费者和提供者 将业务的所有功能集中在一

    2024年02月08日
    浏览(39)
  • 39.SpringCloud—配置管理nacos、远程调用Feign、服务网关Gateway

    目录 一、SpringCloud。 (1)Nacos配置管理。 (1.1)nacos中添加配置文件、微服务引入依赖,并配置bootstrap.yml文件。 (1.2)获取配置文件信息,实现热更新。 (1.3)多环境配置共享。 (1.4)多服务共享配置。 (2)http客户端Feign。 (2.1)RestTemplate方式调用存在的问题。 (2.2)

    2024年02月10日
    浏览(73)
  • SpringCloud实用篇2——Nacos配置管理 Feign远程调用 Gateway服务网关

    Nacos除了可以做注册中心,同样可以做配置管理来使用。 当微服务部署的实例越来越多,达到数十、数百时,逐个修改微服务配置就会让人抓狂,而且很容易出错。我们需要一种统一配置管理方案,可以集中管理所有实例的配置。 Nacos一方面可以将配置集中管理,另一方可以

    2024年02月13日
    浏览(53)
  • SpringCloud Alibaba(一)微服务简介+Nacos的安装部署与使用+Nacos集成springboot实现服务注册+Feign实现服务之间的远程调用+负载均衡+领域划分

    目录 一.认识微服务 1.0.学习目标 1.1.单体架构 单体架构的优缺点如下: 1.2.分布式架构 分布式架构的优缺点: 1.3.微服务 微服务的架构特征: 1.4.SpringCloud 1.5Nacos注册中心 1.6.总结 二、Nacos基本使用安装部署+服务注册 (一)linux安装包方式单节点安装部署 1. jdk安装配置 2. na

    2024年02月09日
    浏览(47)
  • 微服务技术栈-Nacos配置管理和Feign远程调用

    在上篇文章中介绍了微服务技术栈中Nacos这个组件的概念,Nacos除了可以做注册中心,同样可以做配置管理来使用。同时我们将学习一种新的远程调用方式Feign,它可以帮助我们优雅的实现http请求的发送。 Nacos除了可以做注册中心,同样可以做配置管理来使用。每个微服务可以

    2024年02月02日
    浏览(40)
  • SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式,系统详解springcloud微服务技术栈

    我们发现在微服务中有一个令人头疼的问题——部署,用Docker去解决这个部署难题 1、项目部署的问题 2、Docker 扔到一台机器上,它们的依赖难道没有干扰吗?不会,docker将打包好的程序放到一个隔离容器去运行,使用沙箱机制,避免互相干扰,之间不可见,这样就解决了混

    2023年04月24日
    浏览(46)
  • 详解SpringCloud微服务技术栈:强推!源码跟踪分析Ribbon负载均衡原理、Eureka服务部署

    👨‍🎓作者简介:一位大四、研0学生,正在努力准备大四暑假的实习 🌌上期文章:详解SpringCloud微服务技术栈:认识微服务、服务拆分与远程调用 📚订阅专栏:微服务技术全家桶 希望文章对你们有所帮助 服务提供者:一次业务中,被其它微服务调用的服务(提供接口给

    2024年01月18日
    浏览(43)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包