写在前面

这里介绍下RabbitMQ的相关架构,还有服务端的相关命令

rabbitMQ是Erlang语言开发的消息中间件,会不同于kafka,RocketMQ

rabbitMQ中多了User(Tag)、Virtual Hosts(绑定用户,Tag)、policy(这里更高级的操作,多机房部署,异地多活机制)

本篇包括以下几个方面的学习

  • 服务搭建
  • 服务端命令学习
  • 基本架构
  • 页面管理、监控
  • 更多客户端API操作,可链接

一、服务搭建

docker pull rabbitmq:3.8-management
docker run -d --name rabbitmq \
-p 5672:5672 \
-p 15672:15672 \
-v /my/rabbitmq/data:/var/lib/rabbitmq \
--hostname myrabbit \
-e RABBITMQ_DEFAULT_VHOST=/vhost  \
-e RABBITMQ_DEFAULT_USER=root \
-e RABBITMQ_DEFAULT_PASS=root \
rabbitmq:3.8-management

页面管理

http://localhost:15672/

二、基本架构

架构建立在 虚拟主机和用户上

2.1、user

2.2、Virtual host


知识点

  • 虚拟主机,一般设定是要绑定用户权限的(会默认绑定管理员用户),页面这里并没有体现!!
    可以命令行 绑定虚拟主机用户权限,参考下文

policies 是虚拟主机的参数配置,

2.3、policies

policies 是参数配置

这个设置也是RabbitMQ不同于其他MQ的东西,可以设置Queue和Exchange的相关参数,异地多活实现中会用到这个参数配置

2.4、Exchange

Exchange和Queue才是我们的操作和监控对象…,

这个Exchange是一个比较重要的概念,交换机
每个 交换机都会默认7 个交换机,会有四种不同的类型

  • direct
  • fanout
  • headers
  • topic

一般使用时,会自定义交换机,绑定 Routing key 路由到不同的queue中,

,或 不自定义交换机,使用 默认的 AMQP Default ,这个时候, Routing key == Queue Name

2.5、Queue

需要注意 Queue 的知识点

  • Type - - Classic(经典) / Quorum(法定)
  • Durability - - Durable(耐用,持久存储) / transient(临时存储)
  • autoDelete - - NO / YES
  • Priority 优先级

Queue可以定义优先级(0-255),使用时,注意 2 点

  1. 将队列声明为优先级队列,即在创建队列的时候添加参数 x-max-priority 以指定最大的优先级,值为0-255(整数)。

  2. 为优先级消息添加优先级(范围在队列优先级最大值内生效)。

三、服务端命令学习

3.1、用户管理

添加用户
rabbitmqctl  add_user username password

列出所有用户
rabbitmqctl list_users

删除用户
rabbitmqctl  delete_user username

清除用户权限
rabbitmqctl  clear_permissions  -p  vhostpath  username

列出用户权限
rabbitmqctl  list_user_permissions root

修改密码
rabbitmqctl  change_password  username  newpassword

3.2、虚拟主机管理

列出所以虚拟主机:
rabbitmqctl list_vhosts
列出虚拟主机上的所有权限:
rabbitmqctl list_permissions -p h3
创建虚拟主机:
rabbitmqctl add_vhost h3
设置用户权限:
rabbitmqctl  set_permissions  -p  h3  username  ".*"  ".*"  ".*"
删除虚拟主机:
rabbitmqctl delete_vhost vhost h3

关于设置权限的时候,必须指定虚拟主机(智能单个指定)

3.3、服务状态、集群监控

移除所有数据,要在 rabbitmqctl stop_app 之后使用: rabbitmqctl reset
组成集群命令: rabbitmqctl join_cluster <clusternode> [--ram]
查看集群状态: rabbitmqctl cluster_status
修改集群节点的存储形式: rabbitmqctl change_cluster_node_type disc | ram
摘除节点:rabbitmqctl   forget_cluster_node  [--offline]
修改节点名称:rabbitmqctl  rename_cluster_node   oldnode1  newnode1 

四、更多客户端API使用,可参考链接

五、关于 Rest API 可参考链接

https://kdocs.cn/l/cA2uFJ8r6
[金山文档] RabbitMQ Management HTTP API.html