【微服务 SpringCloud】实用篇 · 服务拆分和远程调用

news2024/11/28 23:43:49

微服务(2)

在这里插入图片描述

文章目录

  • 微服务(2)
    • 1. 服务拆分原则
    • 2. 服务拆分示例
        • 1.2.1 导入demo工程
        • 1.2.2 导入Sql语句
    • 3. 实现远程调用案例
        • 1.3.1 案例需求:
        • 1.3.2 注册RestTemplate
        • 1.3.3 实现远程调用
        • 1.3.4 查看效果
    • 4. 提供者与消费者

微服务(2)

本文将正式进入微服务框架SpringCloud和SpringCloudAlibaba的学习了,他们的工作就是微服务治理

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

1. 服务拆分原则

服务拆分就是单个模块拆成多个模块,不过模块必须具有一定的独立性,这里我总结了微服务拆分时的几个原则:

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

在这里插入图片描述

2. 服务拆分示例

以本链接的项目示例:资源/cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)

这么一个简单的微服务cloud-demo为例,其结构如下:

在这里插入图片描述

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

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

这样模拟出微服务的效果,满足以下要求:

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

网络资料:

在这里插入图片描述

1.2.1 导入demo工程

项目结构如下:

在这里插入图片描述

多个应用/多个微服务运行的界面设置(这样可以更好的观察和操作)

在这里插入图片描述

添加运行的类型:

  • 添加application、maven、springboot即可(这里没有springboot也没关系)

在这里插入图片描述

等待pom.xml加载完毕,项目可以尝试启动:

  • 打开控制台的services选项

在这里插入图片描述

选中父目录,ctrl shift f10运行(这是默认的,如果你改了就是你改的运行快捷键,或者点绿色小三角),就是运行全部服务,如果选中对应的微服务运行就是运行对应的微服务~

在这里插入图片描述

同理,快捷键ctrl f2停止运行

在这里插入图片描述

1.2.2 导入Sql语句

在这里插入图片描述

cloud-user表中初始数据如下:

在这里插入图片描述

cloud-order表中初始数据如下:

在这里插入图片描述

cloud-order表中持有cloud-user表中的id字段。

在这里插入图片描述

  • 数据独立 -> 各自有独立的数据库!

(注意改yml文件的数据库连接配置哦!)

3. 实现远程调用案例

(重启两个微服务)

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

在这里插入图片描述

根据id查询订单,返回值是Order对象,如图:

  • 其中的user为null

在这里插入图片描述

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

在这里插入图片描述

查询的结果如图:

在这里插入图片描述

端口与订单服务不一样哦,解耦合~

1.3.1 案例需求:

order-service中的根据id查询订单业务:

  • 要求在查询订单的同时,根据订单中包含的userId查询出用户信息,一起返回

在这里插入图片描述

我们通过查询到的订单信息的用户id,想要查询用户信息(在这里不会重复开发用户模块的功能,并且订单模块不能直接查询用户模块的数据库),就要访问用户服务暴露的接口

我们需要在order-service中 向user-service发起一个http的请求,调http://localhost:8081/user/{userId}这个接口。

大概的步骤是这样的:

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

在这里插入图片描述

而这是我们未曾尝试过的,但是我们会有这个想法(就像浏览器js的ajax发送http请求一样),事实上在SpringCloud框架中就是支持这种 “后端给后端发http请求” 的!

  • 这就是一个服务到另一个服务的远程调用(我们这里两个微服务挨在一起,实际上的微服务之间可能相隔千里哦)
1.3.2 注册RestTemplate

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

  • RestTemplate这个类就是SpringCloud提供给我们发送http请求滴

在这里插入图片描述

1.3.3 实现远程调用

修改order-service服务中的cn.itcast.order.service包下的OrderService类中的queryOrderById方法:

在这里插入图片描述

1.3.4 查看效果

重启微服务,浏览器访问订单服务:

在这里插入图片描述

4. 提供者与消费者

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

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

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

在这里插入图片描述

但是,服务提供者与服务消费者的角色并不是绝对的,而是相对于业务而言。

如果服务A调用了服务B,而服务B又调用了服务C,服务B的角色是什么?

那么这个身份是 相对而言 的~

  • 对于A调用B的业务而言:A是服务消费者,B是服务提供者
  • 对于B调用C的业务而言:B是服务消费者,C是服务提供者

因此,在不同的业务下,服务B既可以是服务提供者,也可以是服务消费者


文章到此结束!谢谢观看
可以叫我 小马,我可能写的不好或者有错误,但是一起加油鸭🦆

代码:cloud-demo · 游离态/云服务 - 码云 - 开源中国 (gitee.com)


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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

windows安装npm教程

在安装和使用NPM之前,我们需要先了解一下,NPM 是什么,能干啥? 一、NPM介绍 NPM(Node Package Manager)是一个用于管理和共享JavaScript代码包的工具。它是Node.js生态系统的一部分,广泛用于构…

MyBatisPlus(十八)字段类型处理器:对象存为JSON字符串

说明 将一个复杂对象(集合或者普通对象),作为 JSON字符串 存储到数据库表中的某个字段中。 MyBatisPlus 提供优雅的方式,映射复杂对象类型字段和数据库表中的字符串类型字段。 核心注解 TableName(autoResultMap true)TableF…

【Spring Boot 源码学习】@Conditional 条件注解

Spring Boot 源码学习系列 Conditional 条件注解 引言往期内容主要内容1. 初识 Conditional2. Conditional 的衍生注解 总结 引言 前面的博文,Huazie 带大家从 Spring Boot 源码深入了解了自动配置类的读取和筛选的过程,然后又详解了OnClassCondition、…

nodejs+vue百鸟全科赏析网站

目 录 摘 要 I ABSTRACT II 目 录 II 第1章 绪论 1 1.1背景及意义 1 1.2 国内外研究概况 1 1.3 研究的内容 1 第2章 相关技术 3 2.1 nodejs简介 4 2.2 express框架介绍 6 2.4 MySQL数据库 4 第3章 系统分析 5 3.1 需求分析 5 3.2 系统可行性分析 5 3.2.1技术可行性:…

Linux性能优化--性能工具:特定进程内存

5.0 概述 本章介绍的工具使你能诊断应用程序与内存子系统之间的交互,该子系统由Linux内核和CPU管理。由于内存子系统的不同层次在性能上有数量级的差异,因此,修复应用程序使其有效地使用内存子系统会对程序性能产生巨大的影响。 阅读本章后&…

ubuntu 怎样查看隐藏文件

1.通过界面可视化方式 鼠标点击进入该待显示的文件路径,按下ctrl h 刷新,则显示隐藏文件 2. 通过控制台命令行 若使用命令行,则使用命令:ls -a 显示所有文件,也包括隐藏文件

MPNN 模型:GNN 传递规则的实现

首先,假如我们定义一个极简的传递规则 A是邻接矩阵,X是特征矩阵, 其物理意义就是 通过矩阵乘法操作,批量把图中的相邻节点汇聚到当前节点。 但是由于A的对角线都是 0.因此自身的节点特征会被过滤掉。 图神经网络的核心是 吸周围…

【数据结构与算法】堆排序(向下和向上调整)、TOP-K问题(超详细解读)

前言: 💥🎈个人主页:​​​​​​Dream_Chaser~ 🎈💥 ✨✨专栏:http://t.csdn.cn/oXkBa ⛳⛳本篇内容:c语言数据结构--堆排序,TOP-K问题 目录 堆排序 1.二叉树的顺序结构 1.1父节点和子节点…

Ubuntu:ESP-IDF 开发环境配置【保姆级】

物联网开发学习笔记——目录索引 参考官网:ESP-IDF 物联网开发框架 | 乐鑫科技 ESP-IDF 是乐鑫官方推出的物联网开发框架,支持 Windows、Linux 和 macOS 操作系统。适用于 ESP32、ESP32-S、ESP32-C 和 ESP32-H 系列 SoC。它基于 C/C 语言提供了一个自给…

EmoTalk: Speech-Driven Emotional Disentanglement for 3D Face Animation

问题:现存的方法经常忽略面部的情感或者不能将它们从语音内容中分离出来。 方法:本文提出了一种端到端神经网络来分解语音中的不同情绪,从而生成丰富的 3D 面部表情。 1.我们引入了情感分离编码器(EDE),通过交叉重构具有不同情感标签的语音信号来分离语音中的情感和内容。…

MySQL 的下载与安装

MySQL 的下载 https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar 将下载的数据包拉到虚拟机的linux系统的主文件夹下,创建一个MySQL文件存放 安装MySQL 1、解压数据包 tar -xvf mysql-5.7.30-1.el7.x86_64.rpm-bundle.tar -x: 表示解压…

【LLM】浅谈 StreamingLLM中的attention sink和sink token

前言 Softmax函数 SoftMax ( x ) i e x i e x 1 ∑ j 2 N e x j , x 1 ≫ x j , j ∈ 2 , … , N \text{SoftMax}(x)_i \frac{e^{x_i}}{e^{x_1} \sum_{j2}^{N} e^{x_j}}, \quad x_1 \gg x_j, j \in 2, \dots, N SoftMax(x)i​ex1​∑j2N​exj​exi​​,x1​≫xj​,j∈2,……

智慧公厕:提升城市形象的必备利器

智慧公厕是什么?智慧公厕基于物联网的技术基础,整合了互联网、人工智能、大数据、云计算、区块链、5G/4G等最新技术,针对公共厕所日常建设、使用、运营和管理的全方位整体解决方案。智慧公厕广泛应用于旅游景区、城市公厕、购物中心、商业楼宇…

2 files found with path ‘lib/armeabi-v7a/liblog.so‘ from inputs:

下图两个子模块都用CMakeLists.txt引用了android的log库,编译后,在它们的build目录下都有liblog.so的文件。 四个CPU架构的文件夹下都有。 上层模块app不能决定使用哪一个,因此似乎做了合并,路径就是报错里的哪个路径&#xff0c…

WSL Ubuntu 22.04.2 LTS 安装paddle踩坑日记

使用conda安装paddlepaddle-gpu: conda install paddlepaddle-gpu2.5.1 cudatoolkit11.7 -c https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/Paddle/ -c conda-forge 等待安装... 报错处理: (1)(1)PreconditionNotMetError: Cannot load cudnn shared libr…

[BigData:Hadoop]:安装部署篇

文章目录 一:机器103设置密钥对免密登录二:机器102设置密钥对免密登录三:机器103安装Hadoop安装包3.1:wget拉取安装Hadoop包3.2:解压移到指定目录3.2.1:解压移动路径异常信息3.2.2:切换指定目录…

Docker容器端口暴露方式

【Bridge 模式】 当 Docker 进程启动时,会在主机上创建一个名为docker0的虚拟网桥,此主机上启动的 Docker 容器会连接到这个虚拟网桥上。虚拟网桥的工作方式和物理交换机类似,这样主机上的所有容器就通过交换机连在了一个二层网络中。从 doc…

启动速度提升 10 倍:Apache Dubbo 静态化方案深入解析

作者:华钟明 文章摘要: 本文整理自有赞中间件技术专家、Apache Dubbo PMC 华钟明的分享。本篇内容主要分为五个部分: -GraalVM 直面 Java 应用在云时代的挑战 -Dubbo 享受 AOT 带来的技术红利 -Dubbo Native Image 的实践和示例 -Dubbo…

050:mapboxGL加载geojson数据,同时包含点、多边形的处理示例

第050个 点击查看专栏目录 本示例的目的是介绍演示如何在vue+mapbox中加载geojson数据,既显示点又显示多边形。这个示例是显示了一种处理方式,通过过滤的方式将数据分离化,点和多边形通过两个不同的图层来加载表示。 直接复制下面的 vue+mapbox源代码,操作2分钟即可运行实…

Ps:快速蒙版

快速蒙版 Quick Mask是查看和编辑选区的一种模式。 按快捷键 Q 可切换到快速蒙版模式,再按一次 Q 键则会退出快速蒙版模式。 或者,点击工具箱下方的“快速蒙版”按钮来进行切换。 也可使用菜单命令。 Ps菜单:选择/在快速蒙版模式下编辑 Selec…