0x00 RabbitMQ基础
一、主流消息中间件介绍
1、ActiveMQ
-
ActiveMQ是Apache出品,最流行的能力强劲的开源消息总线,并且它是一个完全支持JMS规范的消息中间件。
-
其丰富的API、多种集群构建模式使得它成为业界老牌消息中间件,在中小型企业中应用广泛!
-
MQ衡量指标:服务性能、数据存储、集群架构
-
架构模式

2、KAFKA
-
Kafka是Linkedln开源的分布式发布-订阅消息系统,目前归属于Apache顶级项目。Kafka主要特点是基于Pull的模式来处理消息消费,追求高吞吐量,一开始的目的就是用于日志收集和传输。0.8版本开始支持复制,不支持事务,对消息的重复、丢失、错误没有严格要求,适合产生大量数据的互联网服务的数据收集业务。
-
PageCache:Kafka的生产和读写都发生在PageCache中
-
Kafka集群模式

3、RocketMQ
-
RocketMQ是阿里开源的消息中间件,目前也已经孵化为Apache顶级项目,它是纯Java开发的,具有高吞吐量、高可用性、适合大规模分布式系统应用的特点。RocketMQ思路起源于Kafka,它对消息的可靠传输及事务性做了优化,目前在阿里集团被广泛应用于交易、充值、流计算、消息推送、日志流处理、binglog分发等场景。
-
集群拓扑

4、RabbitMQ
-
RabbitMQ是使用Erlang语言开发的开源消息队列系统,基于AMQP协议来实现。AMQP的主要特征是面向消息、队列、路由(包括点对点和发布/订阅)、可靠性高、安全。AMQP协议更多用在企业系统内,对数据一致性、稳定性和可靠性要求很高的场景,对性能和吞吐量的要求还在其次。
-
架构模式

5、几种中间件的比较
1、更新频率
-
ActiveMQ:(最近两次时间间隔:113天)

-
Kafka:(最近两次时间间隔:17天)

-
RocketMQ:(最近两次次平均时间差:45天)

-
RabbitMQ:(最近两次平均时间差:26天)

-
综上:更新频率:Kafka>RabitMQ >RocketMQ>ActiveMQ
2、性能对比表

3、如何选择
中小型软件公司,建议选RabbitMQ。一方面,erlang语言天生具备高并发的特性,而且他的管理界面用起来十分方便。正所谓,成也萧何,败也萧何!他的弊端也在这里,虽然RabbitMQ是开源的,然而国内有几个能定制化开发erlang的程序员呢?所幸,RabbitMQ的社区十分活跃,可以解决开发过程中遇到的bug,这点对于中小型公司来说十分重要。不考虑rocketmq和kafka的原因是,一方面中小型软件公司不如互联网公司,数据量没那么大,选消息中间件,应首选功能比较完备的,所以kafka排除。不考虑rocketmq的原因是,rocketmq是阿里出品,如果阿里放弃维护rocketmq,中小型公司一般抽不出人来进行rocketmq的定制化开发,因此不推荐。
大型软件公司,根据具体使用在rocketMq和kafka之间二选一。一方面,大型软件公司,具备足够的资金搭建分布式环境,也具备足够大的数据量。针对rocketMQ,大型软件公司也可以抽出人手对rocketMQ进行定制化开发,毕竟国内有能力改JAVA源码的人,还是相当多的。至于kafka,根据业务场景选择,如果有日志采集功能,肯定是首选kafka了。具体该选哪个,看使用场景。
4、对比
https://blog.csdn.net/zzzgd_666/article/details/80880537
二、初识RabbitMQ
RabbitMQ 是一个开源的消息代理和队列服务器,用来通过普通协议在完全不同的应用之间共享数据,RabbitMQ是使用Erlang语言编写的,并且RabbitMQ是基于AMQP协议的。
1、哪些大厂再用RabbitMQ,为什么?
- 滴滴,美团,头条,去哪儿,艺龙…
为什么?也就是说RabbitMQ好在哪?
- 开源、性能优秀、稳定性保障;
- 提供可靠性消息投递模式(config)、返回模式(return);
- 与SpringAMQP完美结合、API丰富;
- 集群模式丰富,表达式配置,HA模式,镜像队列模式;
- 保证数据不丢失的前提做到高可靠性、可用性。
2、RabbitMQ高性能的原因?
- ==Erlang==语言最初在于交换机领域的架构模式,这样使得RabbitMQ在Broker之间进行数据交互的性能是非常优秀的。
- Erlang的优点:==Erlang有着和原生Socket一样的延迟==;
3、什么是AMQP高级消息队列协议?
-
AMQP全称:Advanced Message Queuing Protocol
-
AMQP翻译:高级消息队列协议
-
AMQP定义:是具有现代特征的二进制协议。是一个提供统一消息服务的应用层标准高级消息队列协议,是应用层协议的一个开放标准,为面向消息的中间件设计。
-
AMQP协议模型

4、AMQP核心概念
- Server:又称Broker,接受客户端的连接,实现AMQP实体服务;
- Connection:连接,应用程序与Broker的网络连接;
- Channel:网络信道,几乎所有的操作都在Channel中进行,Channel是进行消息读写的通道。客户端可建立多个Channel,每个Channel代表一个会话任务。
- Message:消息,服务器和应用程序之间传送的数据,由Properties和Body组成。Properties可以对消息进行装饰,比如消息的优先级、延迟等高级特性;Body则是消息体的内容。
- Virtual host:虚拟地址,用于进行逻辑隔离,最上层的消息路由。一个Virtual Host里面可以有若干个Exchange和Queue,同一个Virtual Host里面不能有相同名称的Exchange和Queue;
- Exchange:交换机,接收消息,根据路由键转发消息到绑定的队列;
- Binging:Exchange和Queue之间的虚拟连接,binding中可以包含routing key
- Routing key:一个路由规则,虚拟机可用它来确定如何路由一个特定消息。
- Queue:也称为
Message Queue,消息队列,保存消息并将他们转发给消费者。
5、RabbitMQ的整体架构

6、RabbitMQ消息是如何流转的

7、安装RabbitMQ
7.1、参照以下两个
链接: https://blog.csdn.net/u014209205/article/details/80642210

7.2、配置


7.3、部分讲解

- rabbitmqctl:增加队列,增加交换机,增加用户等操作,集群搭建等
- rabbitmq-plugins:安装、启用插件
- rabbitmq-server:启停服务,查看节点状态
7.4、端口说明
- 5672:Java端通信端口号
- 15672:管控台端口号
- 25672:集群通讯端口号
三、命令行与管控台
1、基础操作
- 关闭应用:
rabbitmqctl stop_app - 启动应用:
rabbitmqctl start_app - 重启应用:
service rabbitmq-server restart - 节点状态:
rabbitmqctl status - 添加用户:
rabbitmqctl add_user username password - 列出所有用户:
rabbitmqctl list_users - 删除用户:
rabbitmqctl delete_user username - 清除用户权限:
rabbitmqctl clear_permissions -p vhostpath username - 列出用户权限:
rabbitmqctl list_user_permissions username - 修改密码:
rabbitmqctl change_password username newpassword - 设置用户权限:
rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*" - 创建虚拟主机:
rabbitmqctl add_vhost vhostpath - 列出所有虚拟主机:
rabbitmqctl list_vhosts - 列出虚拟主机上所有权限:
rabbitmqctl list_permissions -p vhostpath - 删除虚拟主机:
rabbitmqctl delete_vhost vhostpath - 查看所有队列信息:
rabbitmqctl list_queues - 清除队列里的消息:
rabbitmqvtl -p vhostpath purge_queue blue
2、高级操作
- 移除所有数据:
rabbitmqctl reset;要在rabbitmqctl stop_app之后使用。 - 组成集群命令:
rabbitmqctl join_cluster <clusternode> [--ram] - 查看集群状态:
rabbitmqctl cluster_status - 修改集群节点的存储形式:
rabbitmqctl change_cluster_node_type disc | ram - 忘记节点(摘除节点):
rabbitmactl forget_cluster_node [--offline] - 修改节点名称:
rabbitmqctl rename_cluster_node oldnode1 newnode1 [oldnode2] [newnode2...]
3、管控台介绍

