初识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的更多相关文章

  1. RabbitMQ入门-从HelloWorld开始

    从读者的反馈谈RabbitMQ 昨天发完<RabbitMQ入门-初识RabbitMQ>,我陆陆续续收到一些反馈.鉴于部分读者希望结合实例来讲 期待下篇详细,最好结合案例.谢谢! 哪都好,唯 ...

  2. [转]RabbitMQ入门教程(概念,应用场景,安装,使用)

    原文地址:https://www.jianshu.com/p/dae5bbed39b1 RabbitMQ 简介 RabbitMQ是一个在AMQP(Advanced Message Queuing Pr ...

  3. RabbitMQ入门详解以及使用

    目的: RabbitMQ简介 RabbitMQ安装及使用 Centos安装 Docker安装(今天选择Docker安装方法) RabbitMQ快速入门 交换机 RabbitMQ简介 各大主流中间件对比 ...

  4. 2.RABBITMQ 入门 - WINDOWS - 生产和消费消息 一个完整案例

    关于安装和配置,见上一篇 1.RABBITMQ 入门 - WINDOWS - 获取,安装,配置 公司有需求,要求使用winform开发这个东西(消息中间件),另外还要求开发一个日志中间件,但是也是要求 ...

  5. RabbitMQ入门-高效的Work模式

    扛不住的Hello World模式 上篇<RabbitMQ入门-从HelloWorld开始>介绍了RabbitMQ中最基本的Hello World模型.正如其名,Hello World模型 ...

  6. RabbitMQ入门-消息订阅模式

    消息派发 上篇<RabbitMQ入门-消息派发那些事儿>发布之后,收了不少反馈,其中问的最多的还是有关消息确认以及超时等场景的处理. 楼主,有遇到消费者后台进程不在,但consumer连接 ...

  7. RabbitMQ入门-Topic模式

    上篇<RabbitMQ入门-Routing直连模式>我们介绍了可以定向发送消息,并可以根据自定义规则派发消息.看起来,这个Routing模式已经算灵活的了,但是,这还不够,我们还有更加多样 ...

  8. RabbitMQ入门与使用篇

    介绍 RabbitMQ是一个由erlang开发的基于AMQP(Advanced Message Queue)协议的开源实现.用于在分布式系统中存储转发消息,在易用性.扩展性.高可用性等方面都非常的优秀 ...

  9. RabbitMQ入门:认识并安装RabbitMQ(以Windows系统为例)

    最近在学习Spring Cloud,其中消息总线Spring Cloud Bus是必不可少的,但是Spring Cloud Bus目前只支持RabbitMQ和kafka,因此学习RabbitMQ势在必 ...

随机推荐

  1. 移动办公OA系统

    好久没有更新文章了,总觉得心里空空的,最近由于工作的原因,没有来的及及时更新,总感觉应该把学习到的东西做个记录,供大家学习,也供自己复习,温故而知新.今天趁着周末休息时间,把自己最近在公司的做的项目做 ...

  2. POJ 2388

    还是水题,简单的排序.大半夜的,没脑子想太复杂的代码了,就随手找了段以前写的插入排序将就着用了. 题目的意思就是取一个数列的中位数,很简单,排序后取a[n/2]即可. 代码如下: #ifndef _2 ...

  3. golang 私钥"加密"公钥"解密"

    ---恢复内容开始---   之前工作主要使用C/C++与银行/第三方支付对接,但C/C++无法满足客户"当天给协议明天实盘上载"的开发速度以及现公司一些特殊情况,所以决定用go来 ...

  4. 浅谈WEB编辑器——HBuilder

    我自己用过的WEB编辑器有两种:HBuilder和Dreamweaver.这两种编辑器各有各的特点,但是相对来说,我倾向于前者:后者给我的感觉就是功能繁杂,运行起来慢,而且编码的便捷度不高,时不时需要 ...

  5. 基于TFS的.net技术路线的云平台DevOps实践

    DevOps是近几年非常流行的系统研发管理模式,很多公司都或多或少在践行DevOps.那么,今天就说说特来电云平台在DevOps方面的实践吧. 说DevOps,不得不说DevOps的具体含义.那么,D ...

  6. linux环境下创建和删除软链接

    ln -s /home/zhenwx/htccode-v1/ /home/zhenwx/htccode 建立/home/zhenwx/htccode-v1 的软连接 linux下的软链接类似于wind ...

  7. eclipse更改maven的本地路径和外部仓库地址

    背景 当前使用eclipse自带的maven碰到两个蛋疼的问题: maven在国内使用如果不进行FQ则会痛苦不堪如便秘. maven下载大量jar包导致某盘不够用,需要换大的分区. 因此为了解决这个问 ...

  8. java基础(10) -线程

    线程 相当于轻量级进程,线程在程序中是独立的.并发的执行路径,每个线程有它自己的堆栈.自己的程序计数器和自己的局部变量.但是,与分隔的进程相比,进程中的线程之间的隔离程度要小.它们共享内存.文件句柄和 ...

  9. TwenLite源码阅读

    概要: 这里使用的TweenLite版本是:V1.18.0. TweenLite核心有: EventDispatcher:用个as3的对这个应该不陌生,用来添加事件监听和抛出事件的.不过,js版是阉割 ...

  10. Hibernate错误:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execute JDBC batch update

    报错:Exception in thread "main" org.hibernate.exception.SQLGrammarException: Could not execu ...