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的区别相关推荐

  1. 详解RPC远程调用和消息队列MQ的区别

    谈到分布式架构,就不得不谈到分布式架构的基石RPC. 什么是RPC RPC(Remote Procedure Call)远程过程调用,主要解决远程通信间的问题,不需要了解底层网络的通信机制. RPC服 ...

  2. 消息队列的使用场景_消息队列MQ的特点、选型及应用场景

    一.什么是消息队列 消息队列(Message Queue,简称MQ),指保存消息的一个容器,本质是个队列. 消息(Message)是指在应用之间传送的数据,消息可以非常简单,比如只包含文本字符串,也可 ...

  3. mybatis select语句会默认带排序吗_10月阿里最新38道Java面试题解析(MyBatis+消息队列+Redis)...

    MyBatis面试题 一.谈谈你对 MyBatis 的理解? 1. Mybatis是一个半ORM(对象关系映射)框架,它内部封装了 JDBC,开发时只需要关注 SQL 语句本身,不需要花费精力去处理加 ...

  4. Java架构之消息队列 (一):消息队列的概述

    消息队列系列分享大纲: 一.消息队列的概述 二.消息队列之RabbitMQ的使用 三.消息队列之Kafka的使用 四.消息队列之RabbitMQ的原理详解 五.消息队列之Kafka的原理详解 六.消息 ...

  5. 浅谈消息队列及常见的分布式消息队列中间件

    背景 分布式消息队列中间件是是大型分布式系统不可缺少的中间件,通过消息队列,应用程序可以在不知道彼此位置的情况下独立处理消息,或者在处理消息前不需要等待接收此消息.所以消息队列主要解决应用耦合.异步消 ...

  6. springboot使用redis实现消息队列功能,redis使用list和stream实现消息队列功能,redis实现消息队列的风险点分析

    文章目录 写在前面 基于list的消息队列解决方案 使用list基本实现消息队列 阻塞式消费,避免性能损失 替换while(true) 实现消息幂等 保证消息可靠性 基于stream的消息队列解决方案 ...

  7. 【队列源码研究】消息队列beanstalkd源码详解

    顺风车运营研发团队 李乐 1.消息队列简介 计算机软件发展的一个重要目标是降低软件耦合性: 网站架构中,系统解耦合的重要手段就是异步,业务之间的消息传递不是同步调用,而是将一个业务操作分为多个阶段,每 ...

  8. 对POSIX和SystemV消息队列优化:用户态消息队列

    在文章<Linux C语言在用户态实现一个低时延通知(eventfd)+轮询(无锁队列ring)机制的消息队列>中介绍了用户态低时延消息队列的实现,下面我们简单介绍优化步骤. 源码链接:h ...

  9. java实现rabbitmq简单队列模型,生产者 消费者 消息队列

    生产者向队列发送消息,随机消费者从队列中接收消息 创建用户和虚拟主机 通过rabbitmq提供的用户管理界面可以很轻松的创建用户和虚拟主机,并且需要将用户绑定到对应的虚拟主机.自带有guest用户和/ ...

最新文章

  1. 如何创建 java虚拟机_Java虚拟机如何创建对象?
  2. BZOJ4690 Never Wait for Weights(并查集)
  3. 京东 你访问的页面需要验证证书_SSL证书安全认证有什么原理?
  4. 陶哲轩的10岁与30岁
  5. 提升应用视觉Android效果的10个UI技巧
  6. java 处理unicode_Java与Unicode
  7. 伪分布式kafka安装与验证
  8. “异常的”间谍软件窃取工业企业凭据
  9. 【体系结构】LGWR进程触发机制的理解
  10. iOS Swift 2 2 监听耳机的 插拔的事件
  11. 二分类最优阈值确定_结合mRMR选择和IFCM聚类的遥感影像分类算法
  12. 中介者模式-Mediator Pattern
  13. python语音验证码识别_基于Python的手机语音验证码api调用代码实例
  14. linux find 隐藏,使用find命令查找Linux中的隐藏文件的方法
  15. Cesium 中的离屏渲染
  16. 【STM32学习笔记1】Cortex-M3与STM32基本概念
  17. power bi 度量值SUMX(FILTER和EARLIER结合
  18. Shell笔记(超级完整)
  19. MySQL中的条件判断函数 CASE WHEN、IF、IFNULL你会用吗?
  20. 谈一谈量化投资从哪里获取数据(会经常更新-2020-09-06)

热门文章

  1. Visual Studio 2010 Ultimate敏捷测试驱动开发
  2. 2008年CCNA第三学期第一单元中文题目(2008-12-21 18:30:01
  3. html学习_认识html
  4. JavaScript事件循环探索
  5. 【工具使用系列】关于 MATLAB 液压机构,你需要知道的事
  6. 【Linux基础】 diff命令的参数详解和实例
  7. 用Lighttpd做图片服务器
  8. ASP.NET的五大数据控件分析
  9. 指南--安装 NVU HTML 编辑器
  10. 【学习笔记】供应链金融简介(精华)