微服务通信[HTTP|RPC同步通信、MQ异步通信]
概念
A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用)
HTTP同步通信
- 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式
- 使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET、POST、PUT、DELETE等),已经成为替代传统SOAP Web 服务的流行方案
- 具体的类库包括httpclient、RestTemplate、OkHttp,包括Springcloud 中的OpenFegin
- 但是当服务之间的调用较为频繁时,我们一般不会用HTTP调用了,而是选择基于TCP的RPC调用
RPC同步通信
- RPC即Remote Procedure Call(远程过程调用),可确保调用性能更加高效,能支持更高的并发量
- 因为RPC通信过程在传输层(HTTP通信过程在应用层中完成),所以使用RPC调用方式需要在服务层和客户端之间建立Socket连接来实现二进制数据的交换
- RPC是面向服务的,关注于行为和动作;而REST是面向资源的,强调描述应用程序的事物和名词
- RPC框架来屏蔽底层的通信过程,这是RPC框架的核心价值,使得我们更加专注于业务开发
RPC协议的实现框架
主流 RPC 框架有 Dubbo、gRPC、bRPC 和 Thrift以及RMI、SpringCloud等

异步通信
- 当客户端调用服务端时,并不需要等待服务端做出响应时,就要使用异步调用,毕竟使用HTTP或RPC改造成异步调用的成本相关较高,所以更容易使用的是基于MQ(Message Queue 消息队列)来实现服务之间的异步调用
- 通过消息队列实现微服务之间的异步通信,每个服务只需要关注自己的消息队列即可,实现了服务之间的解耦,常见的消息队列包括RabbitMQ、Kafka和ActiveMQ等
总结
- 当一个服务调用另一个服务时,最简单的就是基于HTTP的同步调用,只需目标服务对外暴露相关HTTP请求地址(包括域名或IP、端口、路径等),调用方就能通过该HTTP请求地址调用目标服务
- 当服务之间的调用较为频繁时,就需要选择基于TCP的RPC调用,这种方式可确保性能更加高效,能支持更高的并发量
- 当客户可调用服务端时不需要等待服务端马上做出响应时,就应该使用异步调用,比较容易使用的是基于MQ来实现服务之间的异步调用
- 当要求服务之间的调用必须同步时,可使用MQ开发基于请求应答模式的RPC调用框架
其他
HTTP协议和RPC协议区别
-
功能层面
- http是应用层的超文本传输协议,主要用于网页端和服务端进行传输数据
- 而RPC是远程过程调用协议,它用于应用进程间的通信,屏蔽了通信底层的复杂度,我们开发者就可以去像调用本地服务一样去完成远程服务的一个调用
-
实现层面
- http是一个成熟的应用层协议,它定义了通信报文格式(request/response header,body等),符合这种协议特征的才属于http协议
- 而RPC只是一种通信协议的规范,并没有实现,只有按照RPC通信协议规范实现的通信框架才是协议具体的实现,比如dubbo,grpc,因此我们可以自定义报文规范、自定义序列化方式、自定义网络通信协议类型来作为RPC的实现框架等
-
应用层面
- http协议和实现了RPC规范的框架都可以实现跨网络节点的服务通信,并且它们底层都是用TCP/IP协议作为通信基础。而RPC网络通信协议层我们可以自定义,所以可以通过http协议去实现,比如grpc,openFegin
相关文章:

微服务通信[HTTP|RPC同步通信、MQ异步通信]
概念 A服务调用B服务,B服务调C服务,C服务调D服务,即微服务之间的通信(也可以叫微服务之间的调用) HTTP同步通信 一种轻量级的通信协议,常用于在不同的微服务之间进行通信,也是最简单的通信方式使用REST ful为开发规范,将服务对外暴露的HTTP调用方式为REST API(如GET…...
C语言模拟最简单的计算机
C语言模拟最简单的计算机 以下内容参考南大“计算机系统基础”实验:不停计算的机器 概述 如下面的伪代码所示,计算机运行程序的过程为取指令–>运行指令–>更新PC的值。 while (1) {从PC指示的存储器位置取出指令;执行指令;更新PC; }取指(inst…...

c++图论免费ppt,简单深度理解图论
本篇博文想分享一个ppt,是帮助大家简单深度理解c图论. 作者承诺:分享的东西没有病毒,是资料。 分享的东西一个是ppt,ppt里面是150页的,里面将带领大家简单深度理解c图论,还有一个就是里面例题的数据,大家可以按照数据…...
xml中in的使用
目录 一、简介 二、使用 1、参数为list 2、参数为Array 3、参数为Map XML中大于、小于、不等于符号使用 一、简介 在xml中使用in查询需要使用foreach标签 <foreach item"item" collection"list" index"index" open"(" sep…...

Unity生命周期函数
1、Awake 当对象(自己这个类对象,就是这个脚本)被创建时 才会调用该生命周期函数 类似构造函数的存在 我们可以在一个类对象创建时进行一些初始化操作 2、OnEnable 失活激活(这个勾) 想要当一个对象(游戏…...

【OpenCV入门】第六部分——腐蚀与膨胀
文章结构 腐蚀膨胀开运算闭运算形态学方法梯度运算顶帽运算黑帽运算 腐蚀 腐蚀操作可以让图像沿着自己的边界向内收缩。OpenCV通过”核“来实现收缩计算。“核”在形态学中可以理解为”由n个像素组成的像素块“,像素块包含一个核心(通常在中央位置&…...

[C++] STL_list常用接口的模拟实现
文章目录 1、list的介绍与使用1.1 list的介绍1.2 list的使用 2、list迭代器3、list的构造4、list常用接口的实现4.1 list capacity4.2 插入删除、交换、清理4.2.1 insert任意位置插入4.2.2 push_front头插4.2.3 push_back尾插4.2.4 erase任意位置删除4.2.5 pop_front头删4.2.6 …...

js实现点击查看全部/收起功能
在上一篇文章实现用js截取文本后,我的另一个需求也迎刃而解了。需求就是一段长文本需要溢出隐藏,然后点击全部时显示全部文本,点击收起又回到溢出隐藏的状态。实现的效果如下图: 实现的思路时点击全部时使用这条数据的原文本&…...
安全区域边界技术测评要求项
1.边界防护-非授权设备接入、非授权连接外部网络、无线网络使用和设备可信接入 (网络边界就是采用不同安全策略的两个网络的连接处) 1-1/2-1/3-4/4-6 a)保证跨越边界的访问和数据流通过边界设备提供的受控接口进行通信 b)应能够对…...

基于YOLOV8模型的农作机器和行人目标检测系统(PyTorch+Pyside6+YOLOv8模型)
摘要:基于YOLOV8模型的农作机器和行人目标检测系统可用于日常生活中检测与定位农作机和行人目标,利用深度学习算法可实现图片、视频、摄像头等方式的目标检测,另外本系统还支持图片、视频等格式的结果可视化与结果导出。本系统采用YOLOv8目标…...
我的私人笔记(安装hbase)
在安装前需要安装好JDK、Hadoop以及Zookeeper,JDK版本为1.8、Hadoop版本为2.7.4以及Zookeeper的版本为3.4.10。 4.1.下载 下载地址:Index of /dist/hbase 本次学习版本为: hbase-1.2.1-bin.tar.gz 4.2.安装步骤 上传安装包至hadoop01节点…...

【MySQL】用户管理
之前我们一直都使用root身份来对mysql进行操作,但这样存在安全隐患。这时,就需要使用MySQL的用户管理 目录 一、用户 1.1 用户信息 1.2 添加用户 1.3 删除用户 1.4 修改用户密码 二、用户权限 2.1 赋予授权 2.2 回收权限 一、用户 1.1 用户信息…...
音视频 ffmpeg命令转封装
保持编码格式: ffmpeg -i test.mp4 -vcodec copy -acodec copy test_copy.ts ffmpeg -i test.mp4 -codec copy test_copy2.ts改变编码格式: ffmpeg -i test.mp4 -vcodec libx265 -acodec libmp3lame out_h265_mp3.mkv修改帧率: ffmpeg -i …...

恢复已删除的git分支
1.打开对应项目文件夹目录,在目录下执行git命令 2.执行命令 git reflog --dateiso , 找到最后一次commit 的id 3. 执行git checkout -b 新建分支名称 commitId 就会基于commitId这次提交时工作区新建一个分支,就能达到我们找到删除分支的代码效果。 4.直接看ide…...
ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563)
安全之安全(security)博客目录导读 ATF(TF-A)安全通告汇总 目录 一、ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563) 二、CVE-2017-7563 一、ATF(TF-A)安全通告 TFV-3 (CVE-2017-7563) Title RO内存始终在AArch64 Secure EL1下可执行CVE ID CVE-2017-7563 Date 06 Apr 2017 Vers…...
虚拟机Ubuntu18.04系统使用时所需要的便利配置选项
文章目录 一、屏幕分辨率调节二、解决虚拟机和宿主机之间无法进行复制粘贴和自由移动文件:三、允许使用Git指令四、可以使用Cmake进行编译五、vi编辑器查看代码文件,类型linux的记事本 每次配置虚拟机,都需要重新安装配置一些能提供便利功能的…...
python内置函数
Python 解释器内置了很多函数和类型,任何时候都能使用。以下按字母顺序给出列表。 内置函数 A abs() aiter() all() any() anext() ascii() B bin() bool() breakpoint() bytearray() bytes() C callable() chr() classmethod() compile() complex() D delattr(…...
线性思维和系统思维
1 线性思维介绍 线性思维是一种直线的、均匀的、不变的、单一的、单维的思维方式,一切都随着初始条件的给定而给定。 线性思维的5种具体表现: 简单复制过往经验去推断未来 (比如:银行工作者是铁饭碗)用已知结果得出…...

为什么要学习C++
操作系统历史 UINX操作系统诞生之初是用汇编语言编写的。随着UNIX的发展,汇编语言的开发效率成为一个瓶颈。寻找新的高效开发语言成为UNIX开发者需要解决的问题。当时BCPL语言成为了当时的选择之一。Ken Thomposn对BCPL进行简化得到了B语言。但是B语言不是直接生成…...

eureka服务注册和服务发现
文章目录 问题实现以orderservice为例orderservice服务注册orderservice服务拉取 总结 问题 我们要在orderservice中根据查询到的userId来查询user,将user信息封装到查询到的order中。 一个微服务,既可以是服务提供者,又可以是服务消费者&a…...

深入剖析AI大模型:大模型时代的 Prompt 工程全解析
今天聊的内容,我认为是AI开发里面非常重要的内容。它在AI开发里无处不在,当你对 AI 助手说 "用李白的风格写一首关于人工智能的诗",或者让翻译模型 "将这段合同翻译成商务日语" 时,输入的这句话就是 Prompt。…...

树莓派超全系列教程文档--(61)树莓派摄像头高级使用方法
树莓派摄像头高级使用方法 配置通过调谐文件来调整相机行为 使用多个摄像头安装 libcam 和 rpicam-apps依赖关系开发包 文章来源: http://raspberry.dns8844.cn/documentation 原文网址 配置 大多数用例自动工作,无需更改相机配置。但是,一…...

【人工智能】神经网络的优化器optimizer(二):Adagrad自适应学习率优化器
一.自适应梯度算法Adagrad概述 Adagrad(Adaptive Gradient Algorithm)是一种自适应学习率的优化算法,由Duchi等人在2011年提出。其核心思想是针对不同参数自动调整学习率,适合处理稀疏数据和不同参数梯度差异较大的场景。Adagrad通…...

中南大学无人机智能体的全面评估!BEDI:用于评估无人机上具身智能体的综合性基准测试
作者:Mingning Guo, Mengwei Wu, Jiarun He, Shaoxian Li, Haifeng Li, Chao Tao单位:中南大学地球科学与信息物理学院论文标题:BEDI: A Comprehensive Benchmark for Evaluating Embodied Agents on UAVs论文链接:https://arxiv.…...

遍历 Map 类型集合的方法汇总
1 方法一 先用方法 keySet() 获取集合中的所有键。再通过 gey(key) 方法用对应键获取值 import java.util.HashMap; import java.util.Set;public class Test {public static void main(String[] args) {HashMap hashMap new HashMap();hashMap.put("语文",99);has…...

STM32标准库-DMA直接存储器存取
文章目录 一、DMA1.1简介1.2存储器映像1.3DMA框图1.4DMA基本结构1.5DMA请求1.6数据宽度与对齐1.7数据转运DMA1.8ADC扫描模式DMA 二、数据转运DMA2.1接线图2.2代码2.3相关API 一、DMA 1.1简介 DMA(Direct Memory Access)直接存储器存取 DMA可以提供外设…...

Python实现prophet 理论及参数优化
文章目录 Prophet理论及模型参数介绍Python代码完整实现prophet 添加外部数据进行模型优化 之前初步学习prophet的时候,写过一篇简单实现,后期随着对该模型的深入研究,本次记录涉及到prophet 的公式以及参数调优,从公式可以更直观…...
OkHttp 中实现断点续传 demo
在 OkHttp 中实现断点续传主要通过以下步骤完成,核心是利用 HTTP 协议的 Range 请求头指定下载范围: 实现原理 Range 请求头:向服务器请求文件的特定字节范围(如 Range: bytes1024-) 本地文件记录:保存已…...

WordPress插件:AI多语言写作与智能配图、免费AI模型、SEO文章生成
厌倦手动写WordPress文章?AI自动生成,效率提升10倍! 支持多语言、自动配图、定时发布,让内容创作更轻松! AI内容生成 → 不想每天写文章?AI一键生成高质量内容!多语言支持 → 跨境电商必备&am…...

android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...