RabbitMQ入门-初识RabbitMQ
初识RabbitMQ
要说RabbitMQ,我们不得不先说下AMQP。AMQP,即Advanced Message Queuing Protocol,高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。消息中间件主要用于组件之间的解耦,消息的发送者无需知道消息使用者的存在,反之亦然。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。
那么RabbitMQ是什么?
RabbitMQ是一个开源的AMQP实现,开源项目地址在GitHub上,可以在GitHub上搜索rabbitmq-tutorials,服务器端用Erlang语言编写,支持多种客户端,如:Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX,具有很好的跨平台特性。用于在分布式系统中存储转发消息,在易用性、扩展性、高可用性等方面表现不俗。
RabbitMQ和Redis是目前对于高并发高性能网站应用的两大削峰利器。这两天在做一个功能的时候也正好用到,所以这一系列就来学习下RabbitMQ,看看它是如何施展拳脚,发挥自己的作用的。
基本概念
如果一上来就干巴巴的将一大推概念会让很多没有接触RabbitMQ的人头皮发麻,好的产品是因为好用,易懂,而不是一套又一套天花乱坠的概念。所以,我们先看下面一张图

结合这幅图,我们大概了解下RabbitMQ的工作流程以及是如何解决问题的。
请点击此处输入图片描述
最左边的橙色的长方块Publisher,其表示的生产者,在这里表示是消息的生产者,因为整个流程都是一个消息传递的过程
紧挨着的浅黄的圆形Exchange,其表示的是一个交换机,生产者发送的消息并不是直接送到最后的消费者手上,如果真是这样,那么RabbitMQ就没有存在的意义。正是由于有Exchange这样的一个中转站、缓冲,使得RabbitMQ成为异步处理的很好的手段,从而使削峰成为了可能。
下一个青涩的圆形Queue,其表示的是一个队列。Queue是用来存储消息的,RabbitMQ中的消息都只能存储在Queue中,生产者Publisher生产消息并最终投递到Queue中,消费者可以从Queue中获取消息并消费。
流程的最后一个浅黄色长方块Consumer,其表示的是消费者,消费者从Queue中取出消息,进行消费。注意:粗略来看,RabbitMQ就是一款目的明确,简单易用的产品。但是作为一款完备的产品,在很多细节的地方都有很好的处理手段,上图中每一条线,每一次流向都有很多的细节和设计技巧可以讲,但是作为入门篇,这里还是循序渐进从最基本的开始。
RabbitMQ的各种Exchange类型
上图展示的只是一个生产者发送消息到exchange,然后也只有一个消费者通过获取存储到Queue中的消息进行消费。但是在实际生产应用中,我们需要实现和应用的类型要更加复杂、多样。下面我们简单了解下RabbitMQ还支持了那些类型
Hello World类型

顾名思义,这是一种最基本的类型,这里只有一个生产这和一个消费者,还有一个消息队列Queue。这个好比送鲜奶的过程,送鲜奶的工作人员将鲜奶投递带鲜奶箱中,居民到点或者有空的时候到鲜奶箱里取出自己的鲜奶,这里的送鲜奶的工作人员就是生产者,居民就是消费者,存放鲜奶的鲜奶箱则是这里的队列Queue。
请点击此处输入图片描述
Work类型
该类型相较于Hello World类型来说,不同之处在于消费者不在只是一个人。对比Hello World类型,它有一个好处,就是不需要像Hello World中的消费者那样,必须等到把前一个消息消费完之后才能消费第二个。这种模式下当C1拿完队列中的一个消息后,C2完全可以同时拿走另外一个消息进行处理,这样的处理方式更加高效。

限于篇幅,这里就介绍这么多,RabbitMQ还有几种Exchange模型我们放在下篇讲,敬请关注^^
如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!如果您想持续关注我的文章,请扫描二维码,关注JackieZheng的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

RabbitMQ入门-初识RabbitMQ的更多相关文章
- RabbitMQ入门-从HelloWorld开始
从读者的反馈谈RabbitMQ 昨天发完<RabbitMQ入门-初识RabbitMQ>,我陆陆续续收到一些反馈.鉴于部分读者希望结合实例来讲 期待下篇详细,最好结合案例.谢谢! 哪都好,唯 ...
- [转]RabbitMQ入门教程(概念,应用场景,安装,使用)
原文地址:https://www.jianshu.com/p/dae5bbed39b1 RabbitMQ 简介 RabbitMQ是一个在AMQP(Advanced Message Queuing Pr ...
- RabbitMQ入门详解以及使用
目的: RabbitMQ简介 RabbitMQ安装及使用 Centos安装 Docker安装(今天选择Docker安装方法) RabbitMQ快速入门 交换机 RabbitMQ简介 各大主流中间件对比 ...
- 2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例
关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置 公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求 ...
- RabbitMQ入门-高效的Work模式
扛不住的Hello World模式 上篇<RabbitMQ入门-从HelloWorld开始>介绍了RabbitMQ中最基本的Hello World模型.正如其名,Hello World模型 ...
- RabbitMQ入门-消息订阅模式
消息派发 上篇<RabbitMQ入门-消息派发那些事儿>发布之后,收了不少反馈,其中问的最多的还是有关消息确认以及超时等场景的处理. 楼主,有遇到消费者后台进程不在,但consumer连接 ...
- RabbitMQ入门-Topic模式
上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...
- RabbitMQ入门与使用篇
介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀 ...
- RabbitMQ入门:认识并安装RabbitMQ(以Windows系统为例)
最近在学习Spring Cloud,其中消息总线Spring Cloud Bus是必不可少的,但是Spring Cloud Bus目前只支持RabbitMQ和kafka,因此学习RabbitMQ势在必 ...
随机推荐
- [1] C# IS & AS讲解
c# 中 is和as 操作符是用来进行强制类型转换的 is : 检查一个对象是否兼容于其他指定的类型,并返回一个Bool值,永远不会抛出异常 object o = new object(); if ( ...
- 配置lnmp
===================准备篇: 1.配置防火墙,开启80端口.3306端口vi /etc/sysconfig/iptables-A INPUT -m state –state NEW ...
- 行内元素和块级元素的具体区别是什么?行内元素的padding和margin可设置吗?
块级元素(block)特性: 总是独占一行,表现为另起一行开始,而且其后的元素也必须另起一行显示; 宽度(width).高度(height).内边距(padding)和外边距(margin)都可控制; ...
- vmware提示:此虚拟机似乎正在使用中,取得该虚拟机的所有权失败错误
用vm的时候,没有挂起和关闭虚拟机,直接关实体机.然后不幸的就异常了. 启动提示:此虚拟机似乎正在使用中.如果此虚拟机已在使用中,请按"取消"按钮,以免损坏它.如果此虚拟机未使用, ...
- Hbase FilterList使用总结
作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7098138.html 转载请注明出处 我们知道Hbase的Scan经常需要用到filter来过滤表中的数 ...
- SQL手动注入解析
作者:震灵 注入环境:DVWA 探测步骤: 1.首先探测是否可以注入以及注入方式 原SQL语句为 SELECT * FROM xxx WHERE a=''; 注入后为 SELECT * FROM xx ...
- 【Android Developers Training】 23. 序言:保存数据
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...
- [翻译]成为顶尖程序员应当学什么?Python、C还是Ruby?
原文地址(墙外):https://medium.com/life-tips/should-you-learn-python-c-or-ruby-to-be-a-top-coder-infographi ...
- MySQL的四种事务隔离级别
本文实验的测试环境:Windows 10+cmd+MySQL5.6.36+InnoDB 一.事务的基本要素(ACID) 1.原子性(Atomicity):事务开始后所有操作,要么全部做完,要么全部不做 ...
- Unity 游戏框架搭建 (三) MonoBehaviour单例的模板
上一篇文章讲述了如何设计C#单例的模板.也随之抛出了问题: 如何设计接收MonoBehaviour生命周期的单例的模板? 如何设计? 先分析下需求: 1.约束脚本实例对象的个数. 2.约束 ...