消息队列之RabbitMQ原理
什么是AMQP?
AMQP,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件而设计的。基于此协议的客户端与消息中间件可以传递消息,并不受客户端/中间件不同产品,不同的开发语言等条件的限制。RabbitMQ就是通过Erlang语言实现的一种消息中间件。
AMQP的特征
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布\订阅模式)、可靠性、安全
JMS编程模型
connectionFactory、destination、connection、session(产生客户端与消息队列服务器的TCP连接)
消息生产者、消息消费者、消息监听器
RabbitMQ是什么
RabbitMQ是一个遵循AMQP协议的消息中间件,它从生产者接受消息并传递给消费者,在这和过程中,根据路由规则就行路由、缓存和持久化。
消息队列中间件的应用场景(不只是RabbitMQ)
- 异步处理:在注册服务的时候,如果同步串行化的方式处理,让存储数据、邮件通知等挨着完成,延迟较大,采用消息队列,可以将邮件服务分离开来,将邮件任务之间放入消息队列中,之间返回,减少了延迟,提高了用户体验
- 应用解耦:电商里面,在订单与库存系统的中间添加一个消息队列服务器,在用户下单后,订单系统将数据先进行持久化处理,然后将消息写入消息队列,直接返回订单创建成功,然后库存系统使用拉/推的方式,获取订单信息再进行库存操作
- 流量削锋:秒杀活动中,一般会因为流量过大,导致流量暴增,应用挂掉。为解决这个问题,一般需要在应用前端加入消息队列。
服务器在接收到用户请求后,首先写入消息队列。这时如果消息队列中消息数量超过最大数量,则直接拒绝用户请求或返回跳转到错误页面;
秒杀业务根据秒杀规则读取消息队列中的请求信息,进行后续处理 - 日志处理:Kalfka消息中间件
RabbitMQ的结构图
几个概念说明:
- Broker:简单来说就是消息队列服务器实体。
- Exchange:消息交换机,它指定消息按什么规则,路由到哪个队列。
- Queue:消息队列载体,每个消息都会被投入到一个或多个队列。
- Binding:绑定,它的作用就是把exchange和queue按照路由规则绑定起来。
- Routing Key:路由关键字,exchange根据这个关键字进行消息投递。
- vhost:虚拟主机,一个broker里可以开设多个vhost,用作不同用户的权限分离。
- Producer:消息生产者,就是投递消息的程序。
- Consumer:消息消费者,就是接受消息的程序。
- Channel:消息通道,在客户端的每个连接里,可建立多个channel,每个channel代表一个会话任务。
消息队列的使用过程
1、客户端连接到消息队列服务器,打开一个channel。
2、客户端声明一个exchange,并设置相关属性。
3、客户端声明一个queue,并设置相关属性。
4、客户端使用routing key,在exchange和queue之间建立好绑定关系。
5、客户端投递消息到exchange。
6、exchange接收到消息后,就根据消息的key和已经设由binding,进行消息路里,将消息投递到一个或多个队列里
ps:通过durable参数来进行exchang、queue、消息持久化
RabbitMQ交换机
RabbitMQ包含四种不同的交换机类型:
- Direct exchange:直连交换机,转发消息到routigKey指定的队列,如果消息的routigKey和binding的routigKey直接匹配的话,消息将会路由到该队列
- Fanout exchange:扇形交换机,转发消息到所有绑定队列(速度最快),不管消息的routigKey息和binding的参数表头部信息和值是什么,消息将会路由到所有的队列
- Topic exchange:主题交换机,按规则转发消息(最灵活),如果消息的routigKey和binding的routigKey符合通配符匹配的话,消息将会路由到该队列
- Headers exchange:首部交换机 ,如果消息的头部信息和binding的参数表中匹配的话,消息将会路由到该队列。
参考博客地址:http://blog.csdn.net/u010046908/article/details/54864567
消息队列之RabbitMQ原理相关推荐
- 消息队列、RabbitMQ原理、消息队列保证幂等性,消息丢失,消息顺序性,以及处理消息队列消息积压问题
消息队列 消息队列(Message Queue,简称MQ),从字面意思上看,本质是个队列,FIFO先入先出,只不过队列中存放的内容是message而已 常见的消息队列 RabbitMq ActiveM ...
- 消息队列之 RabbitMQ
消息队列之 RabbitMQ 关于消息队列,从前年开始断断续续看了些资料,想写很久了,但一直没腾出空,近来分别碰到几个朋友聊这块的技术选型,是时候把这块的知识整理记录一下了. 市面上的消息队列产品有很 ...
- 【重难点】【RabbitMQ 01】消息队列的作用、主流的消息队列、RabbitMQ 基于什么传输消息、RabbitMQ 模型架构、死信队列和延迟队列
[重难点][RabbitMQ 01]消息队列的作用.主流的消息队列.RabbitMQ 基于什么传输消息.RabbitMQ 模型架构.死信队列和延迟队列 文章目录 [重难点][RabbitMQ 01]消 ...
- RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ
RabbitMQ,Apache的ActiveMQ,阿里RocketMQ,Kafka,ZeroMQ,MetaMQ,Redis也可实现消息队列,RabbitMQ的应用场景以及基本原理介绍,RabbitMQ ...
- 消息队列mysql redis那个好_Redis作为消息队列与RabbitMQ的比较
Redis作为消息队列与RabbitMQ的比较 RabbitMQ RabbitMQ是实现AMQP(高级消息队列协议)的消息中间件的一种,最初起源于金融系统,用于在分布式系统中存储转发消息,在易用性.扩 ...
- 【消息队列之rabbitmq】Rabbitmq之消息可靠性投递和ACK机制实战
目录 一.绪论 二.生产者 2.1事务机制 2.2confirm模式 串行模式 批量模式 异步模式 三.消费者 3.1手动ACK 一.绪论 上篇文章介绍了rabbitmq的基本知识.交换机类型实战&l ...
- 消息队列和ZeroMQ原理和应用
一.定义 消息队列(message queue)本质就是个队列,先进先出FIFO. 利用FIFO先进先出的特性,可以保证消息的顺序性. 主要用途:不同服务server.进程process.线程thre ...
- MQ消息队列之RabbitMQ的安装和原理
1. RabbitMQ安装 1.1 推荐方法:docker安装 一行命令搞定: docker pull rabbitmq:management 开启宿主机与容器的两个重要的端口映射即可: docker ...
- 消息队列探秘 – RabbitMQ 消息队列工作原理
1. 历史 RabbitMQ是一个由erlang开发的AMQP(Advanced Message Queue )的开源实现.AMQP 的出现其实也是应了广大人民群众的需求,虽然在同步消息通讯的世界里有 ...
最新文章
- css火狐 hover 图片会重新请求,在“unhovering”之后使CSS Hover状态保持不变
- STL中的栈结构和队列结构
- 任意组合指令达到免杀
- 记一次 .NET 某市附属医院 Web程序 偶发性CPU爆高分析
- 【专升本计算机】最新甘肃省专升本考试C语言部分复习题带答案
- OCLint+Xcode 代码规范利器
- fullcalendar 显示的时间间隔只有四十五分钟_NHR系列智能显示控制仪表RS485通信中应用...
- python3 dict 排序_Python 3.9 新增功能展望
- MySQL有什么新功能?
- multiplot 安装与配置
- NOD32和小红伞的90天免费KEY申请
- 免费公开课:讲解DevExpress 2016.2新版本功能
- wsl2 安装 Centos8
- win10系统开机自动修复失败的解决方法
- 图像形状及数量识别(matlab实现)
- 编译Linux 内核
- PaaS,BLT模型中的一部分
- Voluntarily Relinquishing the Processor-----《Pro_Java_8_Programming_(3rd_edition)》
- POE网络变压器:谈谈网络变压器POE最新标准POE bt及需要关注的三个点
- UEFI+GPT模式下安装win 10系统——生命不止,折腾不息
热门文章
- 移动端实时音视频直播技术详解(一):开篇
- 大数据实战之hadoop生态概况和官网文档解读
- 百度云企业级运维平台——NoahEE
- Python 正则匹配以xx开头以xx结尾的单词
- 今天是微信7周年 7年之痒 一切都已被改变
- NVIDIA/apex报错解决过程
- 上海电力学院计算机院校区,上海电力学院有几个校区及校区地址 哪个校区最好...
- fetchMetadata: sill resolveWithNewModule raw-loader@0.5.1 checking installable status
- HMC7043和HMC7044芯片配置使用
- rman 备份脚本之总结分析