当前位置: 首页 > news >正文

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

微服务(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)


相关文章:

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

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

Linux 下I/O操作

一、文件IO 文件 IO 是 Linux 系统提供的接口,针对文件和磁盘进行操作,不带缓存机制;标准IO是C 语言函数库里的标准 I/O 模型,在 stdio.h 中定义,通过缓冲区操作文件,带缓存机制。   标准 IO 和文件 IO 常…...

C#内映射lua表

都是通过同一个方法得到的 例如得到List List<int> list LuaMgr.GetInstance().Global.Get<List<int>>("testList"); 只要把Get的泛型换成对应的类型即可 得到Dictionnary Dictionary<string, int> dic2 LuaMgr.GetInstance().Global…...

android studio检测不到真机

我的情况是&#xff1a; 以前能检测到&#xff0c;有一天我使用无线调试&#xff0c;发现调试有问题&#xff0c;想改为USB调试&#xff0c;但是半天没反应&#xff0c;我就点了手机上的撤销USB调试授权&#xff0c;然后就G了。 解决办法&#xff1a; 我这个情况比较简单&…...

【Eclipse】设置自动提示

前言&#xff1a; eclipse默认有个快捷键&#xff1a;alt /就可以弹出自动提示&#xff0c;但是这样也太麻烦啦&#xff01;每次都需要手动按这个快捷键&#xff0c;下面给大家介绍的是&#xff1a;如何设置敲的过程中就会出现自动提示的教程&#xff01; 先按路线找到需要的页…...

单片机TDL的功能、应用与技术特点 | 百能云芯

在现代电子领域中&#xff0c;单片机&#xff08;Microcontroller&#xff09;是一种至关重要的电子元件&#xff0c;广泛应用于各种应用中。TDL&#xff08;Time Division Multiplexing&#xff0c;时分多路复用&#xff09;是一种数据传输技术&#xff0c;结合单片机的应用&a…...

解决笔记本无线网络5G比2.4还慢的奇怪问题

环境&#xff1a;笔记本Dell XPS15 9570&#xff0c;内置无线网卡Killer Wireless-n/a/ac 1535 Wireless Network Adapter&#xff0c;系统win10家庭版&#xff0c;路由器H3C Magic R2Pro千兆版 因为笔记本用的不多&#xff0c;一直没怎么注意网络速度&#xff0c;直到最近因为…...

GitHub Action 通过SSH 自动部署到云服务器上

准备 正式开始之前&#xff0c;你需要掌握 GitHub Action 的基础语法&#xff1a; workflow &#xff08;工作流程&#xff09;&#xff1a;持续集成一次运行的过程&#xff0c;就是一个 workflow。name: 工作流的名称。on: 指定次工作流的触发器。push 表示只要有人将更改推…...

【AOP系列】7.数据校验

在Java中&#xff0c;我们可以使用Spring AOP&#xff08;面向切面编程&#xff09;和自定义注解来做数据校验。以下是一个简单的示例&#xff1a; 首先&#xff0c;我们创建一个自定义注解&#xff0c;用于标记需要进行数据校验的方法&#xff1a; import java.lang.annotat…...

黑马JVM总结(三十七)

&#xff08;1&#xff09;synchronized-轻量级锁-无竞争 &#xff08;2&#xff09;synchronized-轻量级锁-锁膨胀 重量级锁就是我们前面介绍过的Monitor enter &#xff08;3&#xff09;synchronized-重量级锁-自旋 &#xff08;4&#xff09;synchronized-偏向锁 轻量级锁…...

企业如何通过媒体宣传扩大自身影响力

传媒如春雨&#xff0c;润物细无声&#xff0c;大家好&#xff0c;我是51媒体网胡老师。 企业可以通过媒体宣传来扩大自身的影响力。可以通过以下的方法。 1. 制定媒体宣传战略&#xff1a; - 首先&#xff0c;制定一份清晰的媒体宣传战略&#xff0c;明确您的宣传目标、目标…...

处理vue直接引入图片地址时显示不出来的问题 src=“[object Module]“

在webpack中使用vue-loader编译template之后&#xff0c;发现图片加载不出来了&#xff0c;开发人员工具中显示src“[object Module]” 这是因为当vue-loader编译template块之后&#xff0c;会将所有的资源url转换为webpack模块请求 这是因为vue使用的是commonjs语法规范&…...

vue3 v-md-editor markdown编辑器(VMdEditor)和预览组件(VMdPreview )的使用

vue3 v-md-editor markdown编辑器和预览组件的使用 概述安装支持vue3版本使用1.使用markdown编辑器 VMdEditor2.markdown文本格式前端渲染 VMdPreview 例子效果代码部分 完整代码 概述 v-md-editor 是基于 Vue 开发的 markdown 编辑器组件 轻量版编辑器 轻量版编辑器左侧编辑…...

java正则表达式 及应用场景爬虫,捕获分组非捕获分组

正则表达式 通常用于校验 比如说qq号 看输入的是否符合规则就可以用这个 public class regex {public static void main(String[] args) {//正则表达式判断qq号是否正确//规则 6位及20位以内 0不能再开头 必须全是数子String qq"1234567890";System.out.println(qq…...

基于 Debian 稳定分支发行版的Zephix 7 发布

Zephix 是一个基于 Debian 稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行&#xff0c;而不触及用户系统磁盘上存储的任何文件。 Zephix 是一个基于 Debian 稳定版的实时 Linux 操作系统。它可以完全从可移动媒介上运行&#xff0c;而不触及用户系统磁盘上存储的…...

MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸

编辑&#xff1a;ll MBR20100CT-ASEMI肖特基MBR20100CT参数、规格、尺寸 型号&#xff1a;MBR20100CT 品牌&#xff1a;ASEMI 芯片个数&#xff1a;2 封装&#xff1a;TO-220 恢复时间&#xff1a;&#xff1e;50ns 工作温度&#xff1a;-65C~175C 浪涌电流&#xff1a…...

修炼k8s+flink+hdfs+dlink(五:安装dockers,cri-docker,harbor仓库)

一&#xff1a;安装docker。&#xff08;所有服务器都要安装&#xff09; 安装必要的一些系统工具 sudo yum install -y yum-utils device-mapper-persistent-data lvm2添加软件源信息 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/cent…...

github: kex_exchange_identification: Connection closed by remote host

问题描述 (base) ➜ test git:(dev) git pull kex_exchange_identification: Connection closed by remote host Connection closed by 192.30.255.113 port 22 致命错误&#xff1a;无法读取远程仓库。解决方案 参照下边文档 https://docs.github.com/en/authentication/tr…...

AWS香港Web3方案日,防御云安全实践案例受关注

9月26日&#xff0c;AWS合作伙伴之Web3解决方案日在香港举办。来自人工智能、Web3等领域的创业公司、技术专家、风险投资商&#xff0c;就元宇宙时代未来发展进行了深入交流。现场展示了顶象防御云在金融与Web3领域的安全实践案例。 Web3为互联网体系架构的一个整体演进和升级&…...

QT 集成MQTT过程

1 编译库文件 Qt QtMqtt官方源码编译教程_“qtmqtt/qmqttglobal.h”: no such file or directory-CSDN博客 2 参考文献 Qt开发MQTT&#xff08;一&#xff09; 之Qt官方Qt MQTT-CSDN博客 QTMQTT 使用MQTT官方库_qt mqtt 官方库-CSDN博客...

GeoServer改造Springboot启动五(解决接口返回xml而不是json)

请求接口返回的是xml&#xff0c;而不是我们常用的json&#xff0c;问题呈现如下图 40 图 40请求接口返回XML 在RequestMapping注解上增加produces {MediaType.APPLICATION_JSON_UTF8_VALUE} 图 41增加produces...

在unity中给游戏物体一个标记

标记 方便识别&#xff01; 标签&#xff08;Tag&#xff09; 引擎内部会对物体的标签建立了索引。通过标签查找物体&#xff0c;要比通过名字查找物体快得多。标签最多只能有 32个。前几个是常用标签&#xff0c;具有特定含义&#xff0c;例如玩家( Player)、主摄摄像机 (Mai…...

【黑马程序员】机器学习

&#xff08;一&#xff09;机器学习概述 一、机器学习算法分类 1、监督学习&#xff1a; &#xff08;1&#xff09;目标值是类别&#xff1a;分类问题 k-近邻算法、贝叶斯分类、决策树与随机森林、逻辑回归 &#xff08;2&#xff09;目标值是连续型的数据&#xff1a;回归…...

flutter card 使用示例

Card组件是卡片组件&#xff0c;内容可以由列表的widget组成&#xff0c;Card组件具有阴影圆角的功能。 常用属性&#xff1a; 属性 说明 margin 外边距elevation 阴影值的深度child 子元素 import package:flutter/material.dart;void main() > runApp(MyApp());class M…...

推荐算法:是否对用户判断能力有影响!!!

首先认识几种常见的推荐算法&#xff1a;推荐算法是一种在信息推送和个性化服务领域常用的技术。它通过分析用户的兴趣、行为和偏好&#xff0c;提供个性化的建议和推荐&#xff0c;以满足用户的需求。以下是对几种常见推荐算法的重新排版&#xff0c;并探讨了它们的作用、影响…...

【OpenVINO】OpenVINO C# API 常用 API 详解与演示

OpenVINO C# API 常用 API 详解与演示 1 安装OpenVINO C# API2 导入程序集 3 初始化OpenVINO 运行时内核4 加载并获取模型信息4.1 加载模型4.2 获取模型信息 5 编译模型并创建推理请求6 张量Tensor6.1 张量的获取与设置6.2 张量的信息获取与设置 7 加载推理数据7.1 获取输入张量…...

django无法导入第三方库

引子 有的人可能会很困惑&#xff0c;为什么自己在pip中安装了某个包&#xff0c;但是在django中死活无法导入。 在cmd中能够导入。 启动django&#xff0c;总是无法导入。 本文将会用一分钟解决你的困惑。 正文 那么本文以上述的第三方库dj_db_conn_pool为例&#xff0c;…...

7-k8s-helm管理

文章目录 一、为什么需要Helm二、Helm相关概念介绍三、Helm安装四、Helm指令介绍五、Helm创建tomcat六、Helm创建tomcat其他方式七、Helm创建redis 一、为什么需要Helm k8s部署&#xff1a;k8s平台部署的服务都是由资源文件描述组成&#xff0c;传统的k8s部署应用需要手工编排…...

零基础怎么样才能学好 Python?Python 入门必看

Python 目前可以用一个字来描述那就是 “火”&#xff0c;问题来了&#xff0c;这么火的语言零基础小白到底该怎样学习 Python&#xff1f; 首先&#xff0c;从基础开始学习&#xff0c;切勿毛躁。 刚开始学习 Python 的时候&#xff0c;我们可能会有些毛躁总觉得这些知识太简…...

1.X3-Warming up

/* 此程序使用 Boost Spirit 库来解析用户提供的逗号分隔的数字列表。它演示了如何使用 Spirit 来定义解析 器和执行解析操作&#xff0c;并且在用户输入时反复执行解析操作。用户可以提供一系列逗号分隔的数字&#xff0c;程序会检查它们 是否符合指定的解析规则。如果解析成功…...

wordpress织梦 更快/奶茶网络营销策划方案

新买的电脑&#xff0c;用一段时间后&#xff0c;可能会出现各种各样的问题&#xff0c;如果垃圾过多、启动速度慢可以通过软件对电脑进行优化&#xff0c;但是如果电脑中毒&#xff0c;反复重启&#xff0c;排除是硬件问题的话&#xff0c;最好的解决之道就是重新安装系统了&a…...

如何建设动漫网站/百度云官网入口

转&#xff1a;http://www.360sps.com/Item/UseTopLink.aspx 在SharePoint 2010环境的页面中&#xff0c;导航链接总体上可以分为两类&#xff0c;一类是显示在左侧的快速启动栏&#xff0c;另一类就是显示在顶部的全部导航链接栏。这两种导航只支持2级菜单项&#xff0c;如果…...

武汉平价做网站/合肥seo推广公司哪家好

对于你在这里所做的事情,使用反射似乎不是一个好的设计.最好使用Map< String,Integer>例如&#xff1a;static final Map VALUES_BY_NAME;static {final Map valuesByName new HashMap<>();valuesByName.put("width", 5);valuesByName.put("potato…...

公司网站维护流程/互联网广告代理可靠吗

已同步到个人博客&#xff0c;欢迎访问。 如果使用了Webpack进行了文件的组织、编译&#xff0c;就可以使用require.context令组件实现自动化注册。 这个过程需要在创建Vue实例之前&#xff08;new Vue({})&#xff09;之前完成&#xff0c;例如src/main.js require.context …...

1号网站建设 高端网站建设/四川网站seo

题目链接&#xff1a;http://poj.org/problem?id2955 题意&#xff1a;求相互匹配的括号个数。 一道简单的区间dp&#xff0c;按常规的套路来写就可以了。 #include <iostream> #include <cstring> #include <string> using namespace std; int dp[110][110…...

做网站的意义/制作网站的软件

Android权限说明 Android系统是运行在Linux内核上的&#xff0c;Android与Linux分别有自己的一套严格的安全及权限机制&#xff0c; Android系统权限相关的内容&#xff0c; &#xff08;一&#xff09;linux文件系统上的权限 -rwxr-x--x system system 4156 2012-06…...