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上即可,该项目所有业务功能都只访问一个数据库,如图所示:

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

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

1.2 分布式架构

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

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

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

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

1.3 微服务

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

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

微服务的架构特征

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

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

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

1.4 SpringCloud

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

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

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

二, 服务拆分和远程调用

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

2,1 服务拆分原则

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

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

2.2 服务拆分示例

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

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

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

要求:

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

2.3 创建相应数据库

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

order-service项目的tb_order表:

 user-service项目的tb_user表:

 2.4 实现远程调用示例

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

 根据查询结果可以看到,返回的Order对象中的user属性为null;

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

1, 更改需求

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

 因为不同业务模块之间是相互独立的,在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实例:

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

 3.重启服务器查看结果

 2.5 服务消费者和提供者

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

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

 但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言,如果服务A调用了服务B,而服务B又调用了服务A,服务B既是服务提供者也是服务消费者.

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

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

相关文章

Springboot整合Minio实现文件上传和下载

目录 1. Minio 1.1 Minio下载 2. Springboot和Minio实现文件存储 1. Minio Minio是一个灵活、高性能、开源的对象存储解决方案,适用于各种存储需求,并可以与云计算、容器化、大数据和应用程序集成。它为用户提供了自主控制和可扩展性,使其…

Go学习第十五章——Gin参数绑定bind与验证器

Go web框架——Gin(参数绑定bind与验证器) 1 bind参数绑定1.1 JSON参数1.2 Query参数1.3 Uri绑定动态参数1.4 ShouldBind自动绑定 2 验证器2.1 常用验证器2.2 gin内置验证器2.3 自定义验证的错误信息2.4 自定义验证器 1 bind参数绑定 在Gin框架中&#…

AD教程(四)排针类元件模型的创建

AD教程(四)排针类元件模型的创建 新建元件,输入排针型号作为元件命名 快捷键TC 快速创建元件 放置外框 放置管脚,排针管脚号在原理图上一般不显示,需要将管脚号隐藏,但一般不建议隐藏,如果将管…

DL Homework 5

目录 习题4-1 对于一个神经元​编辑,并使用梯度下降优化参数w时,如果输入x恒大于0,其收敛速度会比零均值化的输入更慢。 习题4-5 如果限制一个神经网络的总神经元数量(不考虑输入层)为N1,输入层大小为​编辑,输出层大…

PyQuery库写一个有趣的爬虫程序

PyQuery库是一个基于jQuery语法的Python库,它可以方便地对HTML/XML文档进行解析和操作。使用PyQuery库可以快速地获取网页中的数据,进行数据清洗和分析。PyQuery库的基本用法包括字符串初始化、打开网页、css属性、标签内容等获取、DOM基本操作等相关技巧…

基于吉萨金字塔建造算法的无人机航迹规划-附代码

基于吉萨金字塔建造算法的无人机航迹规划 文章目录 基于吉萨金字塔建造算法的无人机航迹规划1.吉萨金字塔建造搜索算法2.无人机飞行环境建模3.无人机航迹规划建模4.实验结果4.1地图创建4.2 航迹规划 5.参考文献6.Matlab代码 摘要:本文主要介绍利用吉萨金字塔建造算法…

NLP之LSTM与BiLSTM

文章目录 代码展示代码解读双向LSTM介绍(BiLSTM) 代码展示 import pandas as pd import tensorflow as tf tf.random.set_seed(1) df pd.read_csv("../data/Clothing Reviews.csv") print(df.info())df[Review Text] df[Review Text].astyp…

思维训练 第四课 省略句

系列文章目录 文章目录 系列文章目录前言一、省略的十五种情况1.并列复合句中某些相同成分的省略2.在用when, while, if, as if, though, although, as ,until, whether等连词引导的状语从句中,如果谓语有be,而主语又跟主句的主语相同或是(从句主语是&am…

STM智能小车——OLED实现测速小车

目录 1. 测速模块 2. 测试原理和单位换算 3. 定时器和中断实现测速开发和调试代码 4. 小车速度显示在OLED屏 1. 测速模块 用途:广泛用于电机转速检测,脉冲计数,位置限位等。有遮挡,输出高电平;无遮挡,输出低电平接线…

Linux———— 运算命令

Shell与其他编程语言一样,支持多种类型的运算符,包括: 算术运算符:用于执行数学运算,例如加法、减法、乘法和除法。 关系运算符:用于比较两个值之间的关系,例如相等、大于、小于等。 布尔运算…

3 — NLP 中的标记化:分解文本数据的艺术

一、说明 这是一个系列文章的第三篇文章, 文章前半部分分别是: 1 、NLP 的文本预处理技术 2、NLP文本预处理技术:词干提取和词形还原 在本文中,我们将介绍标记化主题。在开始之前,我建议您阅读我之前介绍的关…

前聚美优品运维负责人谈CMDB

导读CMDB大家并不陌生,在运维的工作中几乎都会用到CMDB,在聚美内部我们也称它为资产系统,管理整个服务器的资产,当然也包括一些配置上的变更。 讲师介绍 张川,前聚美优品运维负责人。任职聚美优品四年间,负…