初识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. [转] DDD领域驱动设计框架分享

    从去年10月份开始,学了几个月的领域驱动设计(Domain Driven Design,简称DDD).主要是学习领域驱动设计之父Eric Evans的名著:<Domain-driven desi ...

  2. 【CC2530入门教程-01】IAR集成开发环境的建立与项目开发流程

    [引言] 本系列教程就有关CC2530单片机应用入门基础的实训案例进行分析,主要包括以下6部分的内容:1.CC2530单片机开发入门.2.通用I/O端口的输入和输出.3.外部中断初步应用.4.定时/计 ...

  3. Java代码实现 增删查 + 分页——实习第四天

    今天项目内容已经开始了,并且已经完成好多基本操作,今天就开始总结今天学习到的内容,和我遇到的问题,以及分析这其中的原因. 内容模块: 1:Java代码实现对数据库的增删查: 2:分页且获取页面信息: ...

  4. h5、jq 移动端评论点攒功能

    h5.jq 移动端评论点攒功能 平时做的项目中大部分都会涉及到评论的功能,之前用angular写的项目,功能写起来很方便,但是对于一个单页来说,angular有点大材小用了,所有今天分享一个关于jq制 ...

  5. .NET C#到Java没那么难,Servlet篇

    前言 .NET C#到Java没那么难,都是面向对向的语言,而且语法还是相似的,先对比一下开发环境,再到Servlet,再到MVC,都是一样一样的,只是JAVA的配制项比较多而已,只要配好一个,后面都 ...

  6. object覆盖的div解决办法

    最近做个web项目,因为里面有个<object>的插件,弹出<div>对话框会被其遮盖,我做了个<iframe>标签,在弹框时,把<object>覆盖掉 ...

  7. php导入csv文件

    <?php /** * Created by PhpStorm. * User: hanks * Date: 2017/4/30 * Time: 13:24 */ include 'header ...

  8. jQuery星级评分插件

    <!DOCTYPE html> <html lang="zh-CN"> <head> <meta http-equiv="Con ...

  9. HBuilder使用方法

    /*注:本教程针对HBuilder5.0.0,制作日期2014-12-31*/创建HTML结构: h 8 (敲h激活代码块列表,按8选择第8个项目,即HTML代码块,或者敲h t Enter)中途换行 ...

  10. html5小游戏基础知识

    显示一个DIV和隐藏一个DIV 首先,我们要显示一个DIV和隐藏一个DIV需要使用css里面使用: .hide{ display:none;} .show{display:block;} 在需要显示或 ...