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势在必 ...
随机推荐
- C++汉诺塔递归实现
程序背景: 汉诺塔(Tower of Hanoi)又称河内塔,问题是源于印度一个古老传说的益智玩具.大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘.大梵天命 ...
- C# 禁止ALT+F4(钩子)
1. Windows Forms中禁用窗体的关闭按钮 添加必要的命名空间: using System.Runtime.InteropServices; 添加必要的常数和API函数的引用 priv ...
- 使用 bufferedreader 的好处
简单的说,一次IO操作,读取一个字节也是读取,读取8k个字节也是读取,两者花费时间相差不多.而一次IO的来回操作却要耗费大量时间.好比是一辆大型汽车(设装100人),要去车站接人到公司,接一个人也是接 ...
- udl文件测试数据库连接
直接建一个udl后缀的文件(新建txt文件,改后缀) 然后会默认有个小电脑标志,双击打开就可以看到,可以用来配置数据库连接信息,可以测试连接,如果连接通过,可以再用记事本打开这个udl文件,里面就有生 ...
- 伞兵(Paratroopers)
伞兵(Paratroopers) 时间限制: 1 Sec 内存限制: 128 MB 题目描述 公元 2500 年,地球和火星之间爆发了一场战争.最近,地球军队指挥官获悉火星入侵者将派一些伞兵来摧毁地 ...
- 读Zepto源码之属性操作
这篇依然是跟 dom 相关的方法,侧重点是操作属性的方法. 读Zepto源码系列文章已经放到了github上,欢迎star: reading-zepto 源码版本 本文阅读的源码为 zepto1.2. ...
- 【WPF】DispatcherFrame 是个啥玩意儿
对于 WPF 的线程模型,Dispatcher 对象相信各位大伙伴已经不陌生,尤其是跨线程更新UI的时候,都会用它来调度消息.与 Dispatcher 对象有关的,还有一个叫 DispatcherFr ...
- 如何自定义容器网络?- 每天5分钟玩转 Docker 容器技术(33)
除了 none, host, bridge 这三个自动创建的网络,用户也可以根据业务需要创建 user-defined 网络. Docker 提供三种 user-defined 网络驱动:bridge ...
- 使用flask开发网站后端
Flask 是一个用于 Python 的微型网络开发框架,可以用于快速的搭建一个小型的网站. 我的搜索引擎:http://www.abelkhan.com 就是基于flask开发 一个flask的He ...
- 【Android Developers Training】 74. 序言:通过无线连接设备
注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...