【RabbitMQ】1. RabbitMQ介绍

266 阅读5分钟

MQ引言

MQ,英文全称:Message Queue,翻译为消息队列,别名为消息中间件

通过典型的生产—消费者模型,对于生产者(Producer)来说,无需关注消费者是否消费,只需要不断将消息放入消息队列。而对于消费者(Consumer)而言,无需关注生产者是否正常运行,只需要不断获取消息进行业务处理。整个通信的过程没有API的侵入,能够轻松地实现系统间解耦。可以将生产者想象成业务系统A,消费者想象成业务系统B,那么消息队列就做到了业务系统A和业务系统B之间的解耦。

因为消息的生产和消费都是异步的,而且只关心消息的发送和接收,没有业务逻辑的侵入,所以可以通过高效可靠的消息传递机制进行平台无关的数据交流,并基于数据通信来进行分布式系统的集成。

20210824103301.png

主流MQ

目前,Java生态中较为主流的消息中间件有:ActiveMQ,RabbitMQ,Kafka,RocketMQ

  • ActiveMQ:由Apache出品的开源消息总线。ActiveMQ是一个完全支持JMS规范的的消息中间件,拥有丰富的API和多种集群架构模式,在业界一直是老牌的消息中间件。但是由于ActiveMQ在近几年的发展中性能一直饱受诟病,吞吐量并不高,所以很多大公司都放弃使用ActiveMQ,唯有中小企业还在使用。
  • Kafka:由LinkedIn开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息,追求高吞吐量,在众多MQ中效率最高,其一开始设计的目的就是用于在大数据环境下进行日志收集和传输。由于一条两条数据的丢失并不会影响大数据的分析结果,所以Kafka在维护数据一致性上就非常薄弱,在0.8版本开始支持复制,不支持事务,并且对消息的重复、丢失、错误没有严格要求。
  • RocketMQ:阿里开源的消息中间件,它是纯Java开发,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,但并不是Kafka的一个Copy,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流式处理、binglog分发等场景。但是在阿里开源的RocketMQ并不支持分布式事务,只有在阿里云购买官方版本RocketMQ才提供分布式事务的服务。
  • RabbitMQ:由Pivotal开源,使用Erlang语言开发的开源消息队列系统,基于AMOP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布 / 订阅)、可靠性、安全。AMQP协议更多用在企业系统内对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。RabbitMQ是目前MQ中处理数据一致性最好的MQ,即使丢失数据也可以恢复。RabbitMQ一个很大的优势是可以与Spring无缝集成,Spring提供的默认MQ技术栈就是RabbitMQ。

AMQP协议

AMQP,英文全称:Advanced Message Queuing Protocol。在2003年时被提出,最早用于解决金融领域中不同平台之间的消息传递交互问题。顾名思义,AMQP是一种协议,更准确的说是一种binary wire-level protocol(链接协议),这是其和JMS的本质差别。AMQP不从API层进行限定,而是直接定义网络交换的数据格式,这使得实现了AMQP中的生产者天然性就是跨平台的。

AMQP协议模型:

20210826191028.png

观察上述模型可以了解到,生产者和消费者之间没有直接通信,而是利用MQ进行跨系统通信。生产者把消息发送给Server(RabbitMQ中的一个服务器节点),通过Server中的Virtual host(虚拟主机)将消息发送给Exchange(交换机),Exchange最终将消息发送给Message Queue(消息队列)。

RabbitMQ安装(Windows版本)

  1. 下载Erlang:www.erlang.org/downloads/2…

    20210824104902.png

  2. 安装Erlang,设置安装地址,一直点击next即可。

  3. 配置环境变量

    20210824110730.png

    20210824111905.png

  4. 测试Erlang是否安装成功

    出现以下内容说明安装成功。

    20210824112111.png

  5. 下载RabbitMQ:github.com/rabbitmq/ra…

    20210824121145.png

  6. 安装RabbitMQ,设置安装地址,一直点击next即可

  7. 使用命令行进入RabbitMQ的sbin目录下,安装RabbitMQ-Plugins插件

    rabbitmq-plugins enable rabbitmq_management
    
  8. 查看RabbitMQ-Plugins插件是否安装成功

    rabbitmqctl status
    

    出现以下内容说明安装成功。

    20210824121949.png

  9. 启动RabbitMQ:

    rabbitmq-server.bat
    
  10. 浏览器访问:http://localhost:15672/

    RabbitMQ提供三个端口,Web端口为15672,TCP端口为5672,集群通信端口为25672。

    默认用户名密码都是:guest

    20210824122528.png

  11. 关闭RabbitMQ

    rabbitmqctl stop
    

RabbitMQ控制台介绍

RabbitMQ不仅可以使用命令操作,还提供了一个Web可视化控制台,在生产实践中,使用Web控制台较为方便。

20210825012737.png

  • Overview栏:RabbitMQ中整体信息的展示。

  • Connections栏:RabbitMQ中当前连接情况的展示,显示哪些客户端与MQ建立了连接,并支持Page(分页)、Filter(过滤)、Regex(正则)搜索连接。

  • Channels栏:RabbitMQ中当前所有通道的展示,并支持Page、Filter、Regex搜索通道。

  • Exchanges栏:RabbitMQ中当前所有交换机的展示,创建新交换机,并支持Page、Filter、Regex搜索交换机。

    20210825014654.png

    RabbitMQ内置七种交换机,如上表的Name字段所示。

    交换机有四种类型(Type),分别为:direct,fanout,headers,topic。

    交换机有四种特性(Features),分别为D(durable),E(exclusive),AD(auto delete),I(internal)。

  • Queues栏:RabbitMQ中当前所有消息队列的展示,创建新队列,并支持Page、Filter、Regex搜索队列。

    交换机有三种类型,Features分别为D(durable),E(exclusive),AD(auto delete)。

  • Admin栏:RabbitMQ中的用户管理界面,用户信息的增删改查,绑定虚拟主机等。