RabbitMQ是一个由 Erlang 语言开发的开源消息队列系统(所以必须在 Erlang 环境才可以运行)。基于AMQP协议(Advanced Message Queuing Protocol)来实现。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、 安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,其次是对性能和吞吐量的要求。
引用消息队列的有点在于:解耦、异步、削峰。缺点是系统复杂性高,会产生数据不一致的问题。
几种消息消息中间件的对比
1、RocketMQ:
淘宝内部的交易系统使用了淘宝自主研发的Notify消息中间件。
优点: 模型简单,接口易用(JMS 的接口很多场合并不太实用)。在阿里大规模应用。目前支付宝中的余额宝等新兴产品均使用rocketmq。集群规模大概在50台左右,单日处理消息上百亿;性能非常好,可以大量堆积消息在broker 中;支持多种消费,包括集群消费、广播消费等。开发度较活跃,版本更新很快。
缺点:没有在 mq 核心中去实现JMS等接口。
2、Redis:
是一个Key-Value的NoSQL数据库,开发维护很活跃,虽然它是一个Key-Value数据库存储系统,但它本身支持MQ功能,所以完全可以当做一个轻量级的队列服务来使用。
3、Kafka:
Kafka是LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache定级项目。
Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
4、RabbitMQ:
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。
AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
对比:RabbitMQ 比 Kafka 可靠,Kafka 更适合IO高吞吐的处理,比如ELK日志收集。
Kafka具有高的吞吐量,内部采用消息的批量处理,zero-copy机制,数据的存储和获取是本地磁盘顺序批量操作,具有O(1)的复杂度,消息处理的效率很高。
RabbitMQ在吞吐量方面稍逊于Kafka,RabbitMQ支持对消息的可靠的传递,支持事务,不支持批量的操作。
总结:
ActiveMQ:遵循 JMS 规范,安装方便。但有可能会丢失消息,适合中小企业,不适合几千个队列的应用。支持 AMQP、OpenWire 等协议。
RabbitMQ:基于 Erlang 语言开发,难度较大,不支持动态扩展。最初是在金融业得到广泛使用,适合对稳定性较高的企业级应用。
Kafka:依赖于 Zookeeper,可动态扩展节点,具有高性能、高吞吐量。但不支持标准的消息协议,不利于平台的迁移。主要应用于大数据日志处理、实时性、可靠性要求较低的场景(少量数据丢失)。
RabbitMQ 运作原理
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 在 Windows 下的安装
1、先安装 Erlang 语言环境
我们先到 RabbitMQ 官网看到 RabbitMQ 和 Erlang 各个版本的要求:https://www.rabbitmq.com/which-erlang.html
RabbitMQ 3.8.9 之后的版本,要求 Erlang 最低版本是22.3,最高版本是23.X。
那我们就下载最新版的 RabbitMQ 客户端 3.8.14 和 最新版的 Erlang 23.3 吧。
先下载 RabbitMQ 3.8.14,地址:https://www.rabbitmq.com/install-windows.html 大约 17M
如果下载失败,可以点击此链接下载:https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.14/rabbitmq-server-3.8.14.exe
这里提供百度网盘下载地址:https://pan.baidu.com/s/19hDmObzwGQw67eYUGtqSEw 提取码:9c52
然后下载 Erlang:https://www.erlang.org/downloads 大约105M
如果下载失败,可以点击此链接:http://erlang.org/download/otp_win64_23.3.exe
这里提供百度网盘地址:https://pan.baidu.com/s/1AlH8X_JkDe7XLROVioCusw 提取码:38e2
注意: RabbitMQ 的安装依赖于Erlang 环境,所以需要先安装Erlang。
安装 Erlang
安装 Erlang 很简单,常规操作就行。这里贴图。
选择安装路径,这个路径待会需要配置到环境变量。
我们先别【重新启动】,先点击【关闭】。让 Erlang 安装好后重启电脑即可。
接下来配置环境变量。
打开电脑的环境变量,新增环境变量ERLANG_HOME 为 Erlang 的安装路径,然后在系统的 Path 目录下增加 %ERLANG_HOME%\bin 即可。具体步骤如图:
在新建对话框中输入【ERLANG_HOME】,变量值为 Erlang 的安装路径。
在系统变量的 Path 中,增加 Erlang 的bin目录。
以下截图是 Windows10 的页面。如果是 Windows7 请在目录后追加英文分号【;】,然后再输入 Erlang 的bin目录。
验证:我们打开具有管理员权限的 CMD 命令行。输入 erl 回车。会看到 Erlang 安装好了,并且有版本号。
如果不知道如何打开具有管理员权限的 CMD 命令行,请查看我的博客:https://blog.csdn.net/BiandanLoveyou/article/details/115339905
安装 RabbitMQ 服务
也是简单的点击下一步。如果没有成功安装 Erlang 语言环境变量,是无法安装 RabbitMQ 服务器的。
OK,安装完毕!
我们如何启动 RabbitMQ 服务呢?
首先我们在菜单栏里输入 RabbitMQ Service,找到默认的安装路径,如图。我们通常需要 start、stop 两个功能。可以设置到桌面快捷方式,方便。
默认的路径是:C:\Users\你的本机名字\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\RabbitMQ Server
启动 RabbitMQ 服务后,我们输入以下地址登录:http://127.0.0.1:15672/ 默认的用户名和密码都是:guest。用户可以在后台自己创建新的账号。
登录成功后的页面如下: