简介
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
历史
Rabbit科技有限公司开发了RabbitMQ,并提供对其的支持。起初,Rabbit科技是LSHIFT和CohesiveFT在2007年成立的合资企业,2010年4月被VMware旗下的SpringSource收购。RabbitMQ在2013年5月成为GoPivotal的一部分。
基本概念
RabbitMQ是一套开源(MPL)的消息队列服务软件,是由 LShift 提供的一个 Advanced Message Queuing Protocol (AMQP) 的开源实现,由以高性能、健壮以及可伸缩性出名的 Erlang 写成。 RabbitMQ服务支持下列操作系统: Linux 、WindowsNT 到 10 Windows、 Server2003 到 2016、 macOS、 Solaris、 FreeBSD 、 TRU64、 VxWorks RabbitMQ支持下列编程语言: Python、 Java 、Ruby、 PHP、 C# 、JavaScript 、Go、 Elixir、 Objective-C 、Swift
主要特性
可伸缩性:集群服务 消息持久化:从内存持久化消息到硬盘,再从硬盘加载到内存
安装
Erlang与RabbitMQ,安装路径都应不含空格符。 Erlang使用了环境变量HOMEDRIVE与HOMEPATH来访问配置文件.erlang.cookie,应注意这两个环境变量的有效性。需要设定环境变量ERLANG_HOME,并把%ERLANG_HOME%bin加入到全局路径中。 RabbitMQ使用本地computer name作为服务器的地址,因此需要注意其有效性,或者直接解析为127.0.0.1 可能需要在本地网络防火墙打开相应的端口。
AMQP:高级消息队列协议,是应用协议开放的标准,为面向消息中间件设计,它可以使用客户端和对应消息队列进行交互,消息中间件从发布者哪里接收消息,然后转发给消费者(处理消息的应用)。 消息列队: 处理的事件: 流量消峰:秒杀的过程中,常用消息队列来防止后端服务器宕机, 异步处理:数据模型 架构解耦: 消息队列的种类: Redis:后端数据消息队列 MemcacheQ:完美兼容 memcache 多台队列 并发性能好 MSMQ:消息最大的载体,4M,只有发送和接收功能 ZeroMQ:号称最快的消息队列,高吞吐,低延迟,在金融方面用的比较多 Kafka:支持快速的持久化,异步收取,数据量大,高吞吐 ActiveMQ:java的中间力量。 RabbitMQ:开源的,最早的消息队列,最稳定,速度慢,扩展性能比较差,消息封装之后比较大。
RabbitMQ:
Rabbitmq server,消息队列服务,用于接收生产者产生的消息,并将消息分配给消费者 Producer 生产者,生产消息,消息分为两个部分。 标签和数据,标签用于交换匹配
Consumer 消费者,用来消费队列分配的消息,处理完之后要给队列发送ack回应。 消息ack机制:用来判断哪些消息被消费了,如果检测到被消费了,那么这个消息就会被删除,如果所有的consumer没有消费,这个消息就会回转,再次等带消费。
Connection 生产者和消费者与消息队列的tcp连接 Channel 虚拟通道,建立在tcp之上。 Exchange 交换机,会根据自身的匹配规则交给合适的queue Exchange的匹配规则: # Fanout 生产者发送过来的消息交给所有的对列 # Direct 进行精准匹配 # Topic 进行模糊匹配 Queue 消息的载体,队列 Vhost 虚拟主机,一个vhost相当于一个rabbit server ,有单独的队列和交换机。
集群模式: 普通模式:将生产者的消息放在单独的节点上。 镜像模式:将生产者的消息存放在多个节点上。 镜像模式的三个选项: # all 将产生的消息放在所有的节点上。 # Exactly 将产生的消息放在指定数量的节点上。 # Nodes 将产生的消息放在指定的节点上。
单节点部署RabbitMQ
环境准备
IP | 版本 | 服务 |
---|---|---|
192.168.1.40 | CentOS Linux release 7.6.1810 (Core) | rabbitmq-server(3.6.15)、erlang(18.1) |