RabbitMQ的使用介绍
一、RabbitMQ是什么
RabbitMQ是一种常用的消息中间件,是基于AMQP协议,采用erlang语言开发的面向消息服务的中间件,是一个独立的系统应用程序,可以管理服务器计算资源和网络通信。一般可作为同构或异构系统间的数据交换平台,由于erlang语言的高并发特性,使得RabbitMQ的性能较好。应用较为广泛。
二、RabbitMQ的使用场景
举几个例子,如果订单系统最多能处理一万次订单,这个处理能力应付正常时段的下单时绰绰有余,正常时段我们下单一秒后就能返回结果。但是在高峰期,如果有两万次下单操作系统是处理不了的,只能限制订单超过一万后不允许用户下单。而使用消息中间件做缓冲,我们可以取消这个限制,把一秒内下的订单分散成一段时间来处理,这时有些用户可能在下单十几秒后才能收到下单成功的操作,但是比不能下单的体验要好。
简单来说: 就是在访问量剧增的情况下,但是应用依然能够提供服务,比如“双十一”下单的人多,但是淘宝这个应用仍然要运行,所以就可以使用消息中间件采用队列的形式减少突然访问的压力。我们称之为“流量削峰”。
第二个例子,以电商应用为例,应用中有订单系统、库存系统、物流系统、支付系统。用户创建订单后,如果耦合调用库存系统、物流系统、支付系统,任何一个子系统出了故障,都会造成下单操作异常。当转变成基于消息队列的方式后,系统间调用的问题会减少很多,比如物流系统因为发生故障,需要几分钟来修复。在这几分钟的时间里,物流系统要处理的内存被缓存在消息队列中,用户的下单操作可以正常完成。当物流系统恢复后,继续处理订单信息即可,中间用户感受不到物流系统的故障,降低了系统间的耦合性,但是却提高了系统的复杂性,一定程度上提高了系统的可用性。我们称之为“应用解耦”。
第三个例子,还是以电商应用为例,我们下单之后,需要调用库存系统,查看当前库存余量是否支持订单需要,这个时候订单系统在向库存系统发送下单申请后,它不能保证能够立马收到库存系统的反馈,所以需要在库存系统完成查询后,再告诉订单系统下单成功,这是一个异步的过程,订单系统无需因等待库存系统回复而阻塞。我们称之为“异步处理”。
三、RabbitMQ的组成
生产者:生产无非就是发送。发送消息的程序是生产者
队列:队列是 RabbitMQ 中存放消息的结构的名称。 尽管消息流经 RabbitMQ 和您的应用程序,但它们只能存储在队列中。 队列仅受主机内存和磁盘限制的约束,它本质上是一个大消息缓冲区。 许多生产者可以将消息发送到一个队列,许多消费者可以尝试从一个队列接收数据。
消费者:消费者是一个主要等待接收消息的程序
交换机:本质上,消息的生产者并不知道自己产生的消息会具体发送至哪个队列,生产者将消息传递给交换机,由交换机决定将消息发送至哪个队列
RabbitMQ的使用介绍的更多相关文章
- RabbitMQ系列(三)RabbitMQ交换器Exchange介绍与实践
RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...
- rabbitmq的简单介绍一
该博客的主要讲解了以下几种rabbitmq的用法1.实现简单的生产者发送消息给消费者2.实现序列持久化3.实现消息持久化4.实现消息公平分发5.实现广播6.实现组播7.实现细分组播 先来看下rabbi ...
- RabbitMQ的基础介绍
转自:http://blog.csdn.net/whycold/article/details/41119807 一.引言 你是否遇到过两个(多个)系统间需要通过定时任务来同步某些数据?你是否在为异构 ...
- RabbitMQ交换器Exchange介绍与实践
RabbitMQ交换器Exchange介绍与实践 RabbitMQ系列文章 RabbitMQ在Ubuntu上的环境搭建 深入了解RabbitMQ工作原理及简单使用 RabbitMQ交换器Exchang ...
- RabbitMQ 基本概念介绍-----转载
1. 介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue )协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非 ...
- RabbitMQ In JAVA 介绍及使用
介绍: RabbitMQ是开源的消息中间件,它是轻量级的,支持多种消息传递协议,可以部署在分布式和联合配置中,以满足高级别.高可用性需求.并且可在许多操作系统和云环境上运行,并为大多数流行语言提供了广 ...
- RabbitMQ框架构建系列(二)——RabbitMQ基础知识介绍
上一篇记录了一下AMQP协议,RabbitMQ是一个Erlang开发的AMQP协议的开源实现.这一篇简单的介绍一下RabbitMQ的基本原理. 一.RabbitMQ的特点 1.可靠性:RabbitMQ ...
- RabbitMQ(2) 一般介绍
RabbitMQ 即一个消息队列,主要是用来实现应用程序的异步和解耦,同时也能起到消息缓冲,消息分发的作用. 消息中间件在互联网公司的使用中越来越多,刚才还看到新闻阿里将RocketMQ捐献给了apa ...
- RabbitMQ 的基本介绍
RabbitMQ官网教程:http://www.rabbitmq.com/getstarted.html RabbitMQ 是一个由 Erlang 语言开发的 AMQP 的开源实现.AMQP :Adv ...
- rabbitmq的简单介绍二
上一篇博客我们没有介绍完rabbitmq,今天我们接着上一篇的博客继续介绍rabbitmq 这边的博客的内容如下 1.组播,对指定的队列设置关键词,通过关键词来控制消息的分发 2.更加细致的组播 先来 ...
随机推荐
- [cocos2d-x]用getContentSize()返回的值用CCLOG打印必须用%f
今天写代码,又遇到了一个bug,开始还以为是我自己哪写错了,没想到竟然在这里出错? 而width和height的类型是float类型,为什么必须用%d打印?接着我查看了一下源码: 如果没理解错的话,C ...
- 【LGR-125】洛谷 11 月月赛 I & JROI-7 & JRKSJ-5
P8846 『JROI-7』PMK 配匹串符字 简要题意 给出一正整数 \(n(1 \leq n \leq 10^5)\),求出一个由小写英文字母组成的字符串 \(S\),使得 \(|S|=n\) 且 ...
- 根号分治简单笔记 | P3396 哈希冲突
简要题意 你需要维护一个长度为 \(n\) 的序列 \(v\),支持: A x y 求整个序列中,所有模 \(x\) 为 \(y\) 的下标的元素的值,即: \[\sum_{i=0}^{\lfloor ...
- 区块链特辑——solidity语言基础(六)
Solidity语法基础学习 十.实战项目(二): 1.实战准备: ERC20代币接口 ERC20 Token Interface接口 Interface IName {--} ·关键字:interf ...
- MySQL中多种排名实现
一.数据库表结构以及数据 CREATE TABLE `forlan_score` ( `id` bigint(20) NOT NULL AUTO_INCREMENT COMMENT '主键ID', ...
- wixtoolset visualstudio 2017打包流程(1)
第一步: 使用wix提供的 heat.exe 工具生成后缀为 wsx 的配置文件. heat.exe dir ".\binr" -dr INSTALLFOLDER -cg Pr ...
- MyBatis-Plus生成的id传给前端最后两位变为0
问题描述: 使用MybatisPlus-Plus插入一条数据,生成的id长这样 1621328019543105539 但是在前端显示的时候id却是这样 1621328019543105500 所以导 ...
- 12月20日内容总结——ajax补充知识点、多对多外键的三种创建方式、django内置序列化组件、批量操作数据、分页器推导思路与自定义分页器的使用、form组件
目录 一.ajax补充说明 二.多对多三种创建方式 三.django内置序列化组件(drf前身) 四.批量操作数据 五.分页器思路 六.自定义分页器的使用 七.form组件 forms组件介绍 For ...
- bbs大作业
1.项目开发基本流程 1.需求分析 2.架构设计 3.分组开发 4.提交测试 5.交付上线 2.项目流程 仿造博客园项目(核心:文章的增删改查) 1.表分析: 1.1用户表 1.2个人站点表 1.3文 ...
- 【一句话】Redis的3中缓存策略
首先一句话: 旁路缓存模式策略:写->写DB,删缓存,读->读cache,没有则读DB,然后更新到缓存 读写穿透策略:写->写缓存,然后由缓存系统写DB,读->读cache,没 ...