SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用

这篇具有很好参考价值的文章主要介绍了SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

目录

一, 服务架构的演变

1.1 单体架构

1.2 分布式架构

1.3 微服务

1.4 SpringCloud

二, 服务拆分和远程调用

2,1 服务拆分原则

2.2 服务拆分示例

2.3 创建相应数据库

 2.4 实现远程调用示例

1, 更改需求

2, 注册RestTemplate实现远程调用

 2.5 服务消费者和提供者


一, 服务架构的演变

1.1 单体架构

将业务的所有功能集中在一个项目中开发,打成一个包进行部署项目称为单体架构.

假设有一个商城项目,该项目包含订单模块,用户功能,商品功能以及支付功能,将该项目进行部署时,只需要将该项目的所有功能打包成一个包部署在Tomcat上即可,该项目所有业务功能都只访问一个数据库,如图所示:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

单体架构的优点:结构简单,部署成本低(只需要将整个项目打包放在一个Tomcat下即可);

单体架构的缺点:耦合度高(因为一个项目中包含了所有业务功能,不同业务之间的数据都密切耦合).

1.2 分布式架构

根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务,多个这样的服务的组合称为分布式.

还是商城项目,项目包含4个业务功能,每个业务功能只需要开发和自己业务相关的代码即可,用户需要获取数据时只需要调用相应的模块即可,但是这几个模块使用的还是同一个数据库,如图所示:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

分布式架构的优点:降低服务耦合(业务和业务之间相互独立),有利于服务的升级和拓展(需要其他业务模块时只需要单独开发该模块的代码即可);

分布式架构的缺点:服务调用关系错综复杂(假设某一个业务模块需要其他业务模块时就需要调用其他模块进行数据的获取).

1.3 微服务

分布式架构相对于单体架构一定程度上降低了业务模块之间的耦合性,但是正因为业务模块之间的耦合,不同业务模块想要进行交互时就会变的更加困难,还有我们定义的不同业务的粒度是多大,如何做到业务模块拆分的比较合理等等都是需要进一步解决的,所以引出了微服务的概念,微服务需要解决的问题如下:

  • 服务粒度的拆分;
  • 服务集群地址的维护;
  • 服务之间的远程调用;
  • 服务健康状态的感知.

微服务的架构特征

  • 单一职责:微服务拆分粒度很小,每一个服务对应唯一的业务能力,做到单一职责;
  • 自治:团队独立,技术独立,数据独立,独立部署和交付;
  • 面向服务:服务提供统一标准接口,与语言技术无关;
  • 隔离性强:服务调用做好隔离,容错,降级,避免出现级联问题.

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

用户进行服务访问时,会先经过服务网关,网关进行请求的过滤和路由,路由到相应的服务上,在相应的服务上进行数据库的访问等操作.

微服务的上述特性其实是在给分布式架构制定一个标准,进一步降低服务之间的耦合度,提供服务的独立性和灵活性,做到高内聚低耦合.

1.4 SpringCloud

从上述微服务的特征来看,可以认为微服务是一种经过良好架构设计的分布式架构方案,但是方案该怎么落地?选用什么样的技术栈?全球的互联网公司都在积极尝试自己的微服务落地方案,其中Java领域最引人注目的就是SpringCloud提供的方案了.

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

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

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

二, 服务拆分和远程调用

任何分布式架构都离不开服务的拆分,微服务也是一样.

2,1 服务拆分原则

微服务拆分一般有以下几个原则:

  • 不同微服务,不要重复开发相同业务;
  • 微服务数据独立,不要访问其他微服务的数据库;
  • 微服务可以将自己的业务暴露为接口,供其他微服务调用.

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

2.2 服务拆分示例

假设有一个微服务名为cloud-demo,其结构如下:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 cloud-demo:父工程,管理依赖

  • order-service:订单微服务,负责订单相关业务
  • user-service:用户微服务,负责用户相关业务

要求:

  • 订单微服务和用户微服务都必须有各自的数据库,相互独立
  • 订单微服务和用户服务都对外暴露Restful的接口(供其他微服务进行调用)
  • 订单服务如果需要查询用户信息,只能调用用户服务的Restful接口,不能查询用户数据库

2.3 创建相应数据库

因为不同微服务所使用的数据库不一样,所以这里为了演示效果分别给order-service和user-service项目在一个机器上创建两个不同的数据库作为区分

order-service项目的tb_order表:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 user-service项目的tb_user表:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 2.4 实现远程调用示例

在order-service服务中,有一个根据id查询订单的接口:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring 根据查询结果可以看到,返回的Order对象中的user属性为null;

在user-service中有一个根据id查询用户的接口:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

1, 更改需求

 order-service和user-service都可以根据id查询到相应的订单和用户信息,假设现在有一个需求是在查询到订单的同时返回相应的用户信息.

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 因为不同业务模块之间是相互独立的,在order-service中查询相应订单的用户信息就需要在order-service模块下向user-service模块下发送一次http请求调用http://localhost:8081/user/{userId}这个接口获取到用户信息后再进行封装返回.

大概得步骤是这样的:

  1. 注册一个RestTemplate的实例到Spring容器
  2. 修改order-service服务中的OrderService类中的queryOrderById方法,根据Order对象中的userId查询User
  3. 将查询的User填充到Order对象中一起返回

2, 注册RestTemplate实现远程调用

1.我们在order-service服务中的OrderApplication启动类中,注册RestTemplate实例:

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

2.修改OrderService类中的queryOrderById方法实现远程调用

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 3.重启服务器查看结果

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 2.5 服务消费者和提供者

在服务调用关系中,会有两个不同的角色:

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

SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用,SpringCloud微服务,spring cloud,架构,spring

 但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言,如果服务A调用了服务B,而服务B又调用了服务A,服务B既是服务提供者也是服务消费者.文章来源地址https://www.toymoban.com/news/detail-719959.html

到了这里,关于SpringCloud(一) 服务架构的演变及注册RestTemplate实现服务的远程调用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 【微服务开篇-RestTemplate服务调用、Eureka注册中心、Nacos注册中心】

     本篇用到的资料: https://gitee.com/Allengan/cloud-demo.git https://gitee.com/Allengan/cloud-demo.git 目录 1.认识微服务 1.1.单体架构 1.2.分布式架构 1.3.微服务 1.4.SpringCloud 1.5.总结 2.服务拆分和远程调用 2.1.服务拆分原则 2.2.服务拆分示例 2.2.1.导入Sql语句 2.2.2.导入demo工程 2.3.实现远程调用案例

    2024年02月08日
    浏览(37)
  • Spring Cloud Alibaba 微服务2,注册中心演变 + Nacos注册中心与配置中心

    🏆作者简介: 哪吒 ,CSDN2022博客之星Top1、CSDN2021博客之星Top2、多届新星计划导师✌、博客专家💪 , 专注Java硬核干货分享,立志做到Java赛道全网Top N。 🏆本文收录于 Java基础教程系列(进阶篇) ,本专栏是针对大学生、初级Java工程师精心打造, 针对Java生态,逐个击破,

    2024年02月02日
    浏览(278)
  • 微服务—远程调用(RestTemplate)

              在微服务的所有框架中,SpringCloud脱颖而出,它是目前国内使用的最广泛的微服务框架   (官网地址),它集成了各种微服务功能组件,并基于SpringBoot实现了这些组件的自动装配,从而提供了良好的开箱即用的体验 服务拆分注意事项: 单一职责:不同的微服务,

    2024年02月12日
    浏览(39)
  • 微服务架构演变

    单体架构:将业务的所有功能集中在一个项目种开发,打成一个包部署 优点: 架构简单 部署成本低 缺点: 耦合度高 分布式架构:根据业务功能对系统进行拆分,每个业务模块作为独立项目开发,称为一个服务 优点: 降低服务耦合 有利于服务升级拓展 需要考虑的问题:

    2024年02月03日
    浏览(35)
  • 微服务之架构演变

    随着互联网的发展,网站应用规模不断扩大,网站架构随之不断演变,演变历史大致分为单体应用架构-垂直应用架构-分布式架构-SOA架构-微服务架构-云原生架构 以前网站流量小,只需要一个应用就可以把所有功能部署在一起,比如一个电商系统,包含很多模块,我们部署到

    2024年02月10日
    浏览(40)
  • SpringCloud入门——微服务调用的方式 & RestTemplate的使用 & 使用nacos的服务名初步(Ribbon负载均衡)

    1.微服务调用的几种方式,异步消息传递,http调用,服务网关调用,服务发现调用nacos; 2.spring提供的restTemplate,发送HTTP请求的客户端工具类; 3.nacos使用服务名报错,需要加Ribbon负载均衡; RPC (Remote Procedure Call)远程过程调用协议,一种通过网络从远程计算机上请求服务,

    2024年02月10日
    浏览(39)
  • 【Spring Cloud】微服务架构演变及微服务架构介绍

    欢迎来到阿Q社区 https://bbs.csdn.net/topics/617897123 随着互联网的发展,网站应用的规模也在不断的扩大,进而导致系统架构也在不断的进行变化。从互联网早期到现在,系统架构大体经历了下面几个过程:单体应用架构—垂直应用架构—分布式架构—SOA架构—微服务架构,当然还

    2024年02月02日
    浏览(47)
  • springcloud 中RestTemplate 是怎么和 ribbon整合,实现负载均衡的?源码分析

    RestTemplate 内置了一个 ClientHttpRequestInterceptor ,这个是一个拦截器操作,我们可以在请求的前后做一些事情。然后我们看一下这个类,这个类里面 有一个 intercept 方法。我们看下这个实现类,里面有一个 LoadBalancerInterceptor 实现类。 我们来看 LoadBalancerInterceptor 实现类。 然后我

    2024年02月09日
    浏览(41)
  • 【架构设计】单体软件向微服务化演变

    假设单体软件的各模块如下,其中服务包含许多功能模块,如用户管理模块、商品模块、订单模块、仓库模块; 服务化是指对单体服务进行拆分,将一个服务软件拆分为多个相互关联的服务,他们之间相互协作,能正常完成原单体服务的所有业务。 服务化后,有如下优点:

    2024年01月17日
    浏览(82)
  • 系统架构的演变:从单体到微服务的旅程

    随着信息技术的快速发展,系统架构也在不断演变。从早期的单体架构到现代的微服务架构,每一次的变革都带来了更高的灵活性和可扩展性。本文将通过图解和代码示例,详细介绍系统架构的演变过程,并探讨微服务架构的优势和适用性。 单体架构是最早的系统架构之一,

    2024年01月18日
    浏览(40)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包