java队列_RPC远程调用和消息队列MQ的区别
RPC和MQ同样都是用于分布式系统的两个很重要的技术,都有服务提供者、消费者的概念,可在一定程度上对系统进行解耦。但两者之间还是有区别的,本篇简单介绍~
一、RPC
RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制。
RPC框架
知名度较高的有Thrift(FB的)、dubbo(阿里的)。
RPC的一般需要经历4个步骤:
1、建立通信
首先要解决通讯的问题:即A机器想要调用B机器,首先得建立起通信连接,主要是通过在客户端和服务器之间建立TCP连接。
2、服务寻址
要解决寻址的问题,A服务器上如何连接到B服务器(如主机或IP地址)以及特定的端口,方法的名称是什么。
3、网络传输
1)序列化
当A服务器上的应用发起一个RPC调用时,调用方法和参数数据都需要先进行序列化。
2)反序列化
当B服务器接收到A服务器的请求之后,又需要对接收到的参数等信息进行反序列化操作。
4、服务调用
B服务器进行本地调用(通过代理Proxy)之后得到了返回值,此时还需要再把返回值发送回A服务器,同样也需要经过序列化操作,然后再经过网络传输将二进制数据发送回A服务器。
通常,一次完整的PRC调用需要经历如上4个步骤。
二、MQ(消息队列)
消息队列(MQ)是一种能实现生产者到消费者单向通信的通信模型,一般来说是指实现这个模型的中间件。
典型的MQ中间件
RabbitMQ、ActiveMQ、Kafka等
典型的特点:
1、解耦
2、可靠投递
3、广播
4、最终一致性
5、流量削峰
6、消息投递保证
7、异步通信(支持同步)
8、提高系统吞吐、健壮性
典型的使用场景:
秒杀业务中利用MQ来实现流量削峰,以及应用解耦使用。
三、RPC和MQ的区别和关联
1.在架构上,RPC和MQ的差异点是,Message有一个中间结点Message Queue,可以把消息存储。
2.同步调用:对于要立即等待返回处理结果的场景,RPC是首选。
3.MQ 的使用,一方面是基于性能的考虑,比如服务端不能快速的响应客户端(或客户端也不要求实时响应),需要在队列里缓存。另外一方面,它更侧重数据的传输,因此方式更加多样化,除了点对点外,还有订阅发布等功能。
4.而且随着业务增长,有的处理端处理量会成为瓶颈,会进行同步调用改造为异步调用,这个时候可以考虑使用MQ。
以上,是RPC和MQ消息队列的主要区别。
如果觉得不错,请点赞支持下。
----end----
优知学院往期分享的【消息队列系列文章】精选干货,包括MQ的设计思路、核心原理、如何选型、场景应用等,成体系的知识,让你深度掌握MQ。
如何从0到1设计一个MQ消息队列
消息队列的特点、选型及应用场景
MQ消息队列的12点核心原理总结
主流消息队列MQ比较,MQ的4类应用场景
Kafka、RocketMQ、RabbitMQ的优劣势比较
java队列_RPC远程调用和消息队列MQ的区别相关推荐
- 详解RPC远程调用和消息队列MQ的区别
谈到分布式架构,就不得不谈到分布式架构的基石RPC. 什么是RPC RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC服 ...
- 消息队列的使用场景_消息队列MQ的特点、选型及应用场景
一.什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列. 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可 ...
- mybatis select语句会默认带排序吗_10月阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)...
MyBatis面试题 一.谈谈你对 MyBatis 的理解? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加 ...
- Java架构之消息队列 (一):消息队列的概述
消息队列系列分享大纲: 一.消息队列的概述 二.消息队列之RabbitMQ的使用 三.消息队列之Kafka的使用 四.消息队列之RabbitMQ的原理详解 五.消息队列之Kafka的原理详解 六.消息 ...
- 浅谈消息队列及常见的分布式消息队列中间件
背景 分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息.所以消息队列主要解决应用耦合.异步消 ...
- springboot使用redis实现消息队列功能,redis使用list和stream实现消息队列功能,redis实现消息队列的风险点分析
文章目录 写在前面 基于list的消息队列解决方案 使用list基本实现消息队列 阻塞式消费,避免性能损失 替换while(true) 实现消息幂等 保证消息可靠性 基于stream的消息队列解决方案 ...
- 【队列源码研究】消息队列beanstalkd源码详解
顺风车运营研发团队 李乐 1.消息队列简介 计算机软件发展的一个重要目标是降低软件耦合性: 网站架构中,系统解耦合的重要手段就是异步,业务之间的消息传递不是同步调用,而是将一个业务操作分为多个阶段,每 ...
- 对POSIX和SystemV消息队列优化:用户态消息队列
在文章<Linux C语言在用户态实现一个低时延通知(eventfd)+轮询(无锁队列ring)机制的消息队列>中介绍了用户态低时延消息队列的实现,下面我们简单介绍优化步骤. 源码链接:h ...
- java实现rabbitmq简单队列模型,生产者 消费者 消息队列
生产者向队列发送消息,随机消费者从队列中接收消息 创建用户和虚拟主机 通过rabbitmq提供的用户管理界面可以很轻松的创建用户和虚拟主机,并且需要将用户绑定到对应的虚拟主机.自带有guest用户和/ ...
最新文章
- 如何创建 java虚拟机_Java虚拟机如何创建对象?
- BZOJ4690 Never Wait for Weights(并查集)
- 京东 你访问的页面需要验证证书_SSL证书安全认证有什么原理?
- 陶哲轩的10岁与30岁
- 提升应用视觉Android效果的10个UI技巧
- java 处理unicode_Java与Unicode
- 伪分布式kafka安装与验证
- “异常的”间谍软件窃取工业企业凭据
- 【体系结构】LGWR进程触发机制的理解
- iOS Swift 2 2 监听耳机的 插拔的事件
- 二分类最优阈值确定_结合mRMR选择和IFCM聚类的遥感影像分类算法
- 中介者模式-Mediator Pattern
- python语音验证码识别_基于Python的手机语音验证码api调用代码实例
- linux find 隐藏,使用find命令查找Linux中的隐藏文件的方法
- Cesium 中的离屏渲染
- 【STM32学习笔记1】Cortex-M3与STM32基本概念
- power bi 度量值SUMX(FILTER和EARLIER结合
- Shell笔记(超级完整)
- MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?
- 谈一谈量化投资从哪里获取数据(会经常更新-2020-09-06)