声明:对于RabbitMQ的学习基于某课网相关视频和《RabbitMQ实战指南》一书,后续关于RabbitMQ的博客都是基于二者

一、什么是RabbitMQ

  RabbitMQ是开源代理和队列服务器,通过普通协议在不同的应用之间共享数据,使用Erlang编写(Erlang进行数据交换的性能很好,

和原生socket一样好的延迟响应效果),基于AMQP协议

二、AMQP

AMQP高级消息队列协议:具有现代特征的二进制协议,和JMS有点像,模型如下:

AMQP核心概念

  1、Server:Broker,接受client连接,实现AMQP实体服务

  2、Connection:应用程序和Broker的网络连接

  3、Channel:网络信道,读写都是在Channel中进行(NIO的概念),包括对MQ进行的一些操作(例如clear queue等)都是在Channel中进行,

客户端可建立多个Channel,每个Channel代表一个会话任务

  4、Message:由properties(有消息优先级、延迟等特性)和Body(消息内容)组成

  5、Virtual host:用于消息隔离(类似Redis 16个db这种概念),最上层的消息路由,一个包含若干Exchange和Queue,同一个里面Exchange

和Queue的名称不能存在相同的。

  6、Exchange:Routing and Filter

  7、Binding:把Exchange和Queue进行Binding

  8、Routing key:路由规则

  9、Queue:物理上存储消息

三、哪些大厂在使用RabbitMQ,为什么?

滴滴、美团、头条、去哪儿。。。。都再使用RabbitMQ

原因:

  1、开源、性能优秀、能保证稳定性,提供可靠性消息投递模式confirm、返回模式return,和springAMQP完美整合、API丰富

  2、集群模式丰富,表达式配置,HA模式,镜像队列模式

  3、保证数据不丢失的前提下做到高可靠性、高可用性

四、RabbitMQ基础组件

1、Exchange:

  如果不指定Exchange的话,RabbitMQ默认使用,(AMQP default)注意一下,需要将routing key等于queue name相同

2、name、type:

  fanout(效率最好,不需要routing key,routing key如何设置都可以)、direct、topic(#一个或多个,*一个)、headers

3、Auto Delete:

  当最后一个Binding到Exchange的Queue删除之后,自动删除该Exchange

4、Binding:

  Exchange和Queue之间的连接关系,Exchange之间也可以Binding

5、Queue:

  实际物理上存储消息的

6、Durability:

  是否持久化,Durable:是,即使服务器重启,这个队列也不会消失,Transient:否

7、Exclusive:

  这个queue只能由一个exchange监听restricted to this connection,使用场景:顺序消费

8、Message:

  由properties(有消息优先级、延迟等特性)和Body(Payload消息内容)组成,还有content_type、content_encoding、priority

correlation_id、reply_to、expiration、message_id等属性

五、安装

本人很早之前在centos安装过了,具体步骤都忘了,大家可以百度一下,有一大堆呢

需要注意:注意rabbitMQ和erlang版本的对应,而且服务器的host name不要瞎改,当初RabbitMQ一直启动报错,就是这个原因,搞了两天,真的蛋疼

先要确定erlang安装成功,然后按照RabbitMQ

浏览器可视化工具:rabbitmq-plugins enable rabbitmq_management  用户名、密码:guest guest

也可以使用在服务器上安装Docker,之后通过Docker安装RabbitMQ,简单到令人发指,我的另一个阿里云上面就是通过Docker安装的

可视化界面:通过http://ip:15672访问

RabbitMQ系列(二)--基础组件的更多相关文章

  1. 在Node.js中使用RabbitMQ系列二 任务队列

    在上一篇文章在Node.js中使用RabbitMQ系列一 Hello world我有使用一个任务队列,不过当时的场景是将消息发送给一个消费者,本篇文章我将讨论有多个消费者的场景. 其实,任务队列最核心 ...

  2. Spring源码系列(二)--bean组件的源码分析

    简介 spring-bean 组件是 Spring IoC 的核心,我们可以使用它的 beanFactory 来获取所需的对象,对象的实例化.属性装配和初始化等都可以交给 spring 来管理. 本文 ...

  3. RabbitMQ系列二(构建消息队列)

    从AMQP协议可以看出,MessageQueue.Exchange和Binding构成了AMQP协议的核心.下面我们就围绕这三个主要组件,从应用使用的角度全面的介绍如何利用RabbitMQ构建消息队列 ...

  4. MVC3+EF4.1学习系列(二)-------基础的增删改查和持久对象的生命周期变化

    上篇文章中 我们已经创建了EF4.1基于code first的例子  有了数据库 并初始化了一些数据  今天这里写基础的增删改查和持久对象的生命周期变化 学习下原文先把运行好的原图贴来上~~ 一.创建 ...

  5. rabbitmq系列二 之工作队列

    ---恢复内容开始--- 1.工作队列的简介 在上一篇中,我们已经写了一个从已知队列中发送和获取消息的程序,在这里,我们创建一个工作队列(work queue), 会发送一些耗时的任务给多个工作者.模 ...

  6. 玩耍Hibernate系列(二)--基础知识

    Hibernate思维导图   Hibernate映射 关于hibernate的映射要说明的一点就是关于ID的访问权限,peroperty以及field的区别: 表的主键在内存中对应一个OID对象描述 ...

  7. Spring源码系列(三)--spring-aop的基础组件、架构和使用

    简介 前面已经讲完 spring-bean( 详见Spring ),这篇博客开始攻克 Spring 的另一个重要模块--spring-aop. spring-aop 可以实现动态代理(底层是使用 JD ...

  8. SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础

    原文:SQL Server 2008空间数据应用系列二:空间索引(Spatial Index)基础 在前一篇博文中我们学习到了一些关于地理信息的基础知识,也学习了空间参照系统,既地球椭球体.基准.本初 ...

  9. DocX开源WORD操作组件的学习系列二

    DocX学习系列 DocX开源WORD操作组件的学习系列一 : http://www.cnblogs.com/zhaojiedi1992/p/zhaojiedi_sharp_001_docx1.htm ...

随机推荐

  1. GMT和CST的转换

    GMT时间是格林尼治标准时间.CST时间是指包含中国.美国.巴西,澳大利亚四个时区的时间. 在javascript中默认CST是指美国中部时间,倘若在javascript中GMT转换CST则两者相差1 ...

  2. hdu 5001 概率DP 图上的DP

    http://acm.hdu.edu.cn/showproblem.php?pid=5001 当时一看是图上的就跪了 不敢写,也没退出来DP方程 感觉区域赛的题  一则有一个点难以想到 二则就是编码有 ...

  3. gcc优化选项解析

    1 -fno-defer-pop 函数返回的时候,就立即将栈里面放置的该函数的参数pop出来.这样可以避免函数参数占用过多的栈空间. 2 -fforward-propagate ? 3 -ffp-co ...

  4. QVariant(相当于是Java里面的Object,是万能的容器,但要注册)

    这个类型相当于是Java里面的Object,它把绝大多数Qt提供的数据类型都封装起来,起到一个数据类型“擦除”的作用.比如我们的 table单元格可以是string,也可以是int,也可以是一个颜色值 ...

  5. core.async中go的作用研究

    (defmacro go "Asynchronously executes the body, returning immediately to the calling thread. Ad ...

  6. 在canvas上面绘制图片--drawImage实例

    在canvas上面绘制图片--drawImage实例 关键点: 1.图片居中 2.其它 <!DOCTYPE html> <html lang="zh-cn"> ...

  7. 2010–2011, NEERC, Northern Subregional C.Commuting Functions

    C.Commuting Functions 由于要求答案字典序最小,我们肯定希望从g(1)开始对函数g进行赋值,于是又公式f(g(x))=g(f(x)) 设f(x)=i 我们推导出 由于f是双射,当i ...

  8. bzoj1898 [Zjoi2005]Swamp 沼泽鳄鱼——矩阵快速幂

    题目:https://www.lydsy.com/JudgeOnline/problem.php?id=1898 求到达方案数...还是矩阵快速幂: 能够到达就把邻接矩阵那里赋成1,有鳄鱼的地方从各处 ...

  9. Eclipse 使用Anaconda python 解释器

    问题: ubuntu16.04 Anaconda 安装成功 Eclispe 写Python代码 无法使用 (pandas库等) 原因: Eclispe 此时的python解释器==>用的并不是A ...

  10. 命令搜索命令(whereis、which)

    一.whereis命名 解释:搜索系统命令所在的位置,不能查询文件 语法:whereis 命令 -b  之查找可执行的文件在哪里 -m 只查找帮助文件 二.which 命令 解释:能搜索命令所在位置, ...