介绍
来自百度百科
RabbitMQ是实现了高级消息队列协议(AMQP)的开源消息代理软件(亦称面向消息的中间件)。RabbitMQ服务器是用Erlang语言编写的,而集群和故障转移是构建在开放电信平台框架上的。所有主要的编程语言均有与代理接口通讯的客户端库。
作用
- 解耦:服务应用之间通过MQ连接,服务之间由
强依赖转变为弱依赖
- 削峰填谷:短暂一段时间内挤压的消息,慢慢处理,起到削峰填谷
- 消息通讯:点对点、发布订阅式
MQ对比
图片来自网上。选择哪种MQ根据实际情况而定
集群模式
- 主从:master 主节点负责读写,挂了切到slave 上
- 镜像集群:高可用集群,低延迟、不会丢数据。由于是镜像模式每个集群都是全量数据,横向扩容比较难,节点越多写入比较麻烦,吞吐量会降低
- 多活集群:异地容灾,数据拷贝,集群内部负载均访问,外部异地集群通过一些插件实现数据同步、复制
RabbitMQ安装
# 安装erlang
wget https://github.com/rabbitmq/erlang-rpm/releases/download/v22.3.4.5/erlang-22.3.4.5-1.el7.x86_64.rpm
rpm -ivh erlang-22.3.4.5-1.el7.x86_64.rpm
#验证是否成功
erl v
# 下载rabbitMQ
wget https://github.com/rabbitmq/rabbitmq-server/releases/download/v3.8.6/rabbitmq-server-3.8.6-1.el7.noarch.rpm
rpm -ivh rabbitmq-server-3.8.6-1.el7.noarch.rpm
# 安装可能会出现错误 warning: rabbitmq-server-3.8.6-1.el8.noarch.rpm: Header V4 RSA/SHA256 Signature, key ID 6026dfca: NOKEY error: Failed dependencies: socat is needed by rabbitmq-server-3.8.6-1.el8.noarch, 需要安装 socat
yum -y socat #安装好 socat 重试即可
rabbitmq 安装目录: /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.6
#启动
cd /usr/lib/rabbitmq/lib/rabbitmq_server-3.8.6
# 开机启动
chkconfig rabbitmq-server on
/sbin/service rabbitmq-server start
#停止
/sbin/service rabbitmq-server stop
# 查看插件
rabbitmq-plugins list
# 配置客户端插件
rabbitmq-plugins enable rabbitmq_management
rabbitmq 端口默认:5672, 客户端默认端口:15672
默认 guest/guest 可能不能登陆,新增一个 admin 用户,等即可
常用命令
# 关闭应用
rabbitmqctl stop_app
# 启动应用
rabbitmqctl start_app
# 节点状态
rabbitmqctl status
#集群状态
rabbitmqctl cluster_status
# 添加用户密码
rabbitmqctl add_user admin admin
# 用户授权
rabbitmqctl set_user_tags admin administrator
# 修改用户密码
rabbitmqctl change_password username password
# 列出所有用户
rabbitmqctl list_users
# 删除用户
rabbitmqctl delete_user username
# 列出用户权限
rabbitmqctl list_user_permissions username
# 清除用户权限
rabbitmqctl clear_permissions -p vhostpath username
# 设置用户权限
# 三个*对应:configure write read
rabbitmqctl set_permissions -p vhostpath username ".*" ".*" ".*"
rabbitmqctl set_permissions -p / ikang".*" ".*" ".*"
# 列出所有虚拟主机
rabbitmqctl list_vhosts
# 创建虚拟主机
rabbitmqctl add_vhost vhostpath
# 列出虚拟主机的权限
rabbitmqctl list_permissions -p vhostpath
# 删除虚拟主机
rabbitmqctl delete_vhost vhostpath
# 查看所有队列
rabbitmqctl list_queues
# 清除队列里的消息
rabbitmqctl -p vhostpath purge_queue queueName
# 清除所有数据
rabbitmqctl reset