一、入门
1. 什么是MQ
<1> 本质是一个队列,FIFO,先进先出。
<2> 是一种跨进程的通信机制,用于上下游传递消息。
<3> “逻辑解耦+物理解耦”的通讯方式。
2. 为什么要使用MQ
<1> 流量削峰
使用消息队列做缓冲,将任务分做延迟处理
<2> 应用解耦
<3> 异步处理
3. MQ的分类
<1> ActiveMQ
优点
单机吞吐量万级,时效性ms级,可用性高,基于主从架构实现高可用,消息可靠性较低的该路丢失数据。
缺点
官方社区对ActiveMQ 5.x 维护较少,高吞吐量场景较少使用
<2> Kafka
优点
性能卓越,单机写入TPS约在百万条/秒。最大优点吞吐量高。时效性ms级。kafka是分布式的,一个消息多个副本,少数机器宕机不会丢失数据。
Kafkaweb管理界面,Kafka-Manager
缺点
Kafka单机超过64个队列/分区,Load会发生明显的cpu飙高现象,队列越多,load越高,发送消息响应时间边长
<3> RocketMQ
阿里巴巴开源产品,用java实现,设计时参考Kafa,并做了自己的一些改进,
优点
单机吞吐量十万级,可用性非常高,分布式框架,消息可以做到0丢失,MQ功能比较完善,扩展性好,支持10亿级别的消息堆积,不会因为堆积导致性能下降
缺点
支持的客户端语言不多,目前是java和++。其中c++不成熟
<4> RabbitMQ
2007年发布,是一个在AMQP(高级消息队列协议)基础上完成的,可复用的企业消息系统,是当前最主流的消息中间件之一。
优点
由于erlang.语言的高并发特性,性能较好;吞吐量到万级,MQ功能比较完备,健壮、稳定、易用、跨平台、支持多种语言如: Python、Ruby、.NET、Java、JMS、C、PHP、ActionScript、XMPP、STOMP等,支持AJAX文档齐全;开源提供的管理界面非常棒,用起来很好用,社区活跃度高;更新频率相当高
缺点
商业部需要收费,学习成本较高
4. 四大核心概念
<1> 生产者
<2> 队列
<3> 交换机
<4> 消费者
5. 原理名词解释
<1> Broker
接收和分发消息的应用,RabbitMQ Server 就是Message Broker
<2> Vrtual host
出于多租户和安全因素设计的,把AMOP的基本组件划分到一个虚拟的分组中,类似于网络中的namespace概念。当多个不同的用户使用同一个RabbitMQ server 提供的服务时,可以划分出多个 vhost,每个用户在自己的vhost创建exchange / queue 等
<3> Connection
publisher / consumer 和broker之间的TCP连接
<4> Channel
如果每一次访问RabbitMQ都建立一个Connection ,在消息量打的时候建立TCP Connection的开销将是巨大的,效率也较低。Channel是在connection内部建立的逻辑连接,如果应用程序支持多线程,通常每个thread创建单独的channel进行通讯,AMQP method包含了channel id帮助客户端和message broker识别channel,所以channel之间是完全隔离的。Channel作为轻量级的Connection极大减少了操作系统建立TCP connection的开销
<5>Exchange
message 到达 broker 的第一站,根据分发规则,匹配查询表中的 routing key,分发消息到queue 中去。常用的类型有: direct (point-to-point), topic (publish-subscribe) and fanout (multicast)
<6> Queue
消息最终被送到这里等待consumer 取走
<7> Binding
Exchange和queue之间的虚拟连接,Binding中可以包含routing key ,Binding信息被保存到exchange中的查询表,用于message的分发依据。
二、安装
1. 下载RabbitMQ安装包
官网下载https://www.rabbitmq.com/download.html
2. 下载 erlang 依赖
erlang 版本需要和RabbitMQ对应。
wget --content-disposition https://packagecloud.io/rabbitmq/erlang/packages/el/8/erlang-25.0-1.el8.x86_64.rpm/download.rpm
3. 安装命令
rpm -ivh erlang-25.0-1.el8.x86_64.rpm
yum install socat -y
rpm -ivh rabbitmq-server-3.10.6-1.el8.noarch.rpm
4. 常用命令
设置开机启动RabbitMQ服务
chkconfig rabbitmq-server on
启动服务
/sbin/service rabbitmq-server start
查看服务状态
/sbin/service rabbitmq-server status
停止服务
/sbin/service rabbitmq-server stop
5. 安装web 管理页面
步骤如下:
<1> 停止mq服务
/sbin/service rabbitmq-server stop
<2> 开启web管理插件
rabbitmq-plugins enable rabbitmq_management
<3> 默认端口号15672
初始账号/密码guest/guest
<4>添加一个新的用户
rabbitmqctl add_user <user> <password>
<5>设置用户角色
rabbitmqctl set_user_tags <user> administrator
<6>设置用户权限
rabbitmqctl set_ permessions [-p <vhostpath>] <user> <conf> <write> <read>
例
rabbitmqctl set_permissions -p "/" admin ".*" ".*" ".*"
用户admin 具有/vhost这个virtual host中所有的资源的配置,读,写权限
<7>查看当前用户和角色
rabbitmqctl list_users