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的微信公众号,我会将我的文章推送给您,并和您一起分享我日常阅读过的优质文章。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏程序人生

软件性能调优:看数据,还是谈概念?

上周写了「想让服务器跑得快,并不是换个编程语言那么简单」,很多朋友的留言歪了楼:论性能,C语言甩Python数倍到数十倍,你说和编程语言没关?拜托,程序君只是说...

29740
来自专栏AI研习社

犹他州空气质量分析-从EPA的空气质量服务站API中抓取数据

住在山谷里有点像生活在汤碗里,所有重物似乎都集中在碗底。 我想说犹他州的许多山谷被称为地垒和地堑,虽然我确信一些地质学家可能纠正我的错误。无论如何,四面环山意味...

10120
来自专栏SAP最佳业务实践

想学FM系列(15)-SAP FM模块:预算结构(6)-预算结构操作-过账地址维护

3.2.2.2 过账地址维护 ? 1)FMBSPO - 单个处理 功能:手工维护记账地址 ? 过账分类账:如果使用的是9F付款预算则选则9A,如果使用的是...

54860
来自专栏FreeBuf

NSA(美国国安局)泄漏文件深度分析(PART 1)

* 本文原创作者:tom_vodu,本文属FreeBuf原创奖励计划,未经许可禁止转载 一、前言 防火墙是保护内网机器不受网络攻击者侵害的第一道也是非常核心...

31650
来自专栏Java学习网

程序员编程的 7 + 1 条小贴士

程序员编程的 7 + 1 条小贴士 1.编码之前想一想 用10分钟,20分钟甚至30分钟的时间来想想你需要什么,想想什么样的设计模式(如果有的话)适合你将要编码...

31080
来自专栏IT派

10 个技巧,让你更专业地使用 console 进行 JS 调试

首先,我必须承认这一点,我将利用这个平台从我的开发环境中清理出骨架(轮廓)。有时候,我所做的“魔法”(有些人称之为“编码”),并不像我的同事在为他们展示这些宏伟...

11900
来自专栏野路子程序员

徒手解剖composer,简单了解其实现过程

30760
来自专栏测试驿栈

Google 搜索引擎语法

Google Hack原理很简单,就是利用搜索引擎强大的搜索能力,来查找一些存在漏洞的网站。要利用Google来查找网站的漏洞自然要学会Google这个搜索引擎...

66130
来自专栏SAP梦心的SAP分享

会开发和懂开发的区别

       注:本人身为SAP咨询顾问,故以下以SAP开发语言ABAP作为例子,其他语言雷同。         在SAP领域,做开发的人很多,会ABAP的也不...

24160
来自专栏web前端教室

浏览器缓存是嘛?

浏览器的缓存这个东西,我是又爱又恨。爱的是它可以存一些东西在客户端节省资源、提高效率;恨的是你在缓存有时会造成用户那边的信息不更新,你这些修改了,那边收不到。尤...

21660

扫码关注云+社区

领取腾讯云代金券