RabbitMQ 从入门到精通:从工作模式到集群部署实战(三)

news2025/2/11 13:48:47

文章目录

    • 使用CLI管理RabbitMQ
      • rabbitmqctl
      • rabbitmq-queues
      • rabbitmq-diagnostics
      • rabbitmq-plugins
      • rabbitmq-streams
      • rabbitmq-upgrade
      • rabbitmqadmin

使用CLI管理RabbitMQ

RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。
这些工具假定系统区域设置为 UTF-8(例如en_GB.UTF-8或en_US.UTF-8)。如果不是这种情况,这些工具可能仍能正常运行,但不能保证。非 UTF-8 区域将发出警告。
除了 之外rabbitmqadmin,上述所有工具都随 RabbitMQ 一起提供,可sbin 在安装根目录中找到。对于大多数软件包类型,该目录PATH在安装时都会添加到其中,如果是使用二进制包安装,需要手动配置sbin目录的这些命令到系统PATH。

所有命令都可以使用help列出子命令或者参数

rabbitmqctl

通常仅供 RabbitMQ 管理员使用,因为它提供对节点的完全控制,包括虚拟主机、用户和权限管理、对节点数据的破坏性操作等。

rabbitmqctl是一个用于管理RabbitMQ的命令行工具,它可以用于创建和删除队列、交换机以及其他RabbitMQ对象,还可以查看和修改RabbitMQ节点的状态。以下是一些常用的

以下进列出常用rabbitmqctl命令及其功能描述,更多信息请参考help帮助或者官方文档:https://www.rabbitmq.com/docs/3.13/man/rabbitmqctl.8

节点管理
关闭RabbitMQ服务及运行时 (Erlang VM)

rabbitmqctl  shutdown

启动和停止RabbitMQ应用

启动RabbitMQ应用,该命令会启动RabbitMQ消息代理服务器并使其可用。

rabbitmqctl start_app

停止RabbitMQ应用,该命令会停止RabbitMQ消息代理服务器,但不关闭Erlang虚拟机。

rabbitmqctl stop_app

用于重置 RabbitMQ 节点。这个命令会清除节点上的所有数据,包括队列、交换机、绑定、用户、权限和虚拟主机等

rabbitmqctl reset

查看RabbitMQ状态
该命令会显示RabbitMQ服务器的当前状态,包括节点信息、队列信息、交换机信息等。

rabbitmqctl status

用户管理
添加新用户:该命令会创建一个新的RabbitMQ用户,并指定其密码。

rabbitmqctl add_user <username> <password>
[root@rbt01 ~]# rabbitmqctl add_user admin-user01 user01pwd
Adding user "admin-user01" ...
Done. Don't forget to grant the user permissions to some virtual hosts! See 'rabbitmqctl help set_permissions' to learn more.

设置用户角色:该命令会为指定用户设置角色标签,常见的标签包括administrator(管理员)、monitoring(监控)和management(管理)等。

rabbitmqctl set_user_tags <username> <tag>。
[root@rbt01 ~]# rabbitmqctl set_user_tags admin-user01 administrator
Setting tags for user "admin-user01" to [administrator] ...

列出所有用户:该命令会列出所有RabbitMQ用户及其角色信息。

[root@rbt01 ~]# rabbitmqctl list_users
[root@rbt01 ~]# rabbitmqctl list_users
Listing users ...
user    tags
admin   [administrator]
admin-user01    [administrator]
guest   [administrator]

删除用户:该命令会删除指定名称的RabbitMQ用户。

rabbitmqctl delete_user <username>
[root@rbt01 ~]# rabbitmqctl delete_user admin-user01
Deleting user "admin-user01" ...

权限管理
设置用户对虚拟主机的权限:该命令会为指定用户在指定虚拟主机上设置配置(conf)、写(write)和读(read)权限。其中:

<vhost>是虚拟主机名,
<username>是用户名,
<conf>、<write>和<read>分别是对应的权限值(可以使用”.*”表示所有权限,””表示没有权限)。
rabbitmqctl set_permissions -p <vhost> <username> <conf> <write> <read>

全权限

[root@rbt01 ~]# rabbitmqctl set_permissions -p / admin-user01 ".*" ".*" ".*"
Setting permissions for user "admin-user01" in vhost "/" ...

只读权限
配置和写入权限被设置为空字符串(表示不允许),而读取权限被设置为 “.*”(表示允许读取所有队列、交换机和路由键)。

rabbitmqctl set_permissions -p <vhost> <username> "" "" ".*"
[root@rbt01 ~]# rabbitmqctl add_vhost /vhost-test01
Adding vhost "/vhost-test01" ...

[root@rbt01 ~]# rabbitmqctl set_permissions -p  /vhost-test01  admin-user01  "" "" ".*"
Setting permissions for user "admin-user01" in vhost "/vhost-test01" ...

写入权限(无配置和读取):
rabbitmqctl set_permissions -p “” “.*” “”

[root@rbt01 ~]# rabbitmqctl set_permissions -p  /vhost-test01  admin-user01  "" ".*" ""
Setting permissions for user "admin-user01" in vhost "/vhost-test01" ...

特定队列的读写权限:
正则表达式 “^specific.queue$” 用于匹配名为 specific.queue 的特定队列。用户将只有对该队列的配置、写入和读取权限。

rabbitmqctl set_permissions -p <vhost> <username> "^specific\.queue$" "^specific\.queue$" "^specific\.queue$"

多个队列的读写权限

rabbitmqctl set_permissions -p <vhost> <username> "^(queue1|queue2)\." "^(queue1|queue2)\." "^(queue1|queue2)\."

无权限

rabbitmqctl set_permissions -p <vhost> <username> "" "" ""
[root@rbt01 ~]# rabbitmqctl set_permissions -p /vhost-test01 admin-user01 "" "" ""
Setting permissions for user "admin-user01" in vhost "/vhost-test01" ...

虚拟主机管理
添加虚拟主机:该命令会创建一个新的RabbitMQ虚拟主机。

rabbitmqctl add_vhost <vhost>
[root@rbt01 ~]# rabbitmqctl add_vhost /vhost-test02
Adding vhost "/vhost-test02" ...

列出所有虚拟主机:该命令会列出所有RabbitMQ虚拟主机。
rabbitmqctl list_vhosts

[root@rbt01 ~]# rabbitmqctl list_users
Listing users ...
user    tags
admin   [administrator]
admin-user01    [administrator]
guest   [administrator]

删除虚拟主机:该命令会删除指定名称的RabbitMQ虚拟主机。

rabbitmqctl delete_vhost <vhost>
[root@rbt01 ~]# rabbitmqctl delete_vhost /vhost-test02
Deleting vhost "/vhost-test02" ...

队列管理
列出所有队列:该命令会列出所有RabbitMQ队列及其详细信息。

rabbitmqctl list_queues

清空队列:这两个命令都可以清空指定队列中的所有消息。

rabbitmqctl clear_queue <queue_name>或rabbitmqctl purge_queue <queue_name>

列出所有交换机:该命令会列出所有RabbitMQ交换机。

rabbitmqctl list_exchanges

列出所有绑定:该命令会列出所有RabbitMQ绑定。

rabbitmqctl list_bindings

设置交换机和队列绑定

rabbitmqctl bind_queue -p vhost_name queue_name exchange_name routing_key

设置镜像复制策略

rabbitmqctl set_policy ha-three-replicas "^queue_name$" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' --apply-to queues

查看队列和策略的关联

rabbitmqctl list_queues name policy

清除队列里的消息

rabbitmqctl -p vhostpath purge_queue blue

集群管理
将节点加入集群:该命令会将当前节点加入到指定集群中。

rabbitmqctl join_cluster --ram <clusternode>
或rabbitmqctl join_cluster <clusternode>(默认为disc节点)
root@rbt02 ~]# rabbitmqctl join_cluster rabbit@rbt01
Clustering node rabbit@rbt02 with rabbit@rbt01

查看集群状态:该命令会显示RabbitMQ集群的状态,包括集群中的节点及其状态。

rabbitmqctl cluster_status

改变集群节点类型:该命令会改变集群节点的类型,可以是disc节点或ram节点。

磁盘节点(disc node)和内存节点(RAM node)。磁盘节点会将所有的元数据存储在磁盘上,而内存节点则会将元数据存储在内存中。内存节点通常具有更快的访问速度,因为它们不需要从磁盘读取数据,但是它们也更容易在节点重启或崩溃时丢失数据。

rabbitmqctl [--node <node>] [--longnames] [--quiet] change_cluster_node_type <disc | ram>
# 需要先停止app
[root@rbt01 ~]# rabbitmqctl stop_app
Stopping rabbit application on node rabbit@rbt01 ...

[root@rbt01 ~]# rabbitmqctl --node rabbit@rbt01 change_cluster_node_type ram
Turning rabbit@rbt01 into a ram node

[root@rbt01 ~]# rabbitmqctl start_app
Starting node rabbit@rbt01 ...

# 查看集群状态,rabbit@rbt01变为了RAM Nodes
[root@rbt01 ~]# rabbitmqctl cluster_status
Cluster status of node rabbit@rbt01 ...
Basics

Cluster name: rabbitmq-cluster-01
Total CPU cores available cluster-wide: 12

Disk Nodes

rabbit@rbt02
rabbit@rbt03

RAM Nodes

rabbit@rbt01

远程移除集群节点:该命令会远程移除一个集群节点,如果节点未脱机,则需要使用–offline参数。

rabbitmqctl forget_cluster_node [--offline] <clusternode>

以下是命令的详细说明:

[root@rbt01 ~]# rabbitmqctl -n rabbit@rbt01 forget_cluster_node rabbit@rbt03
Removing node rabbit@rbt03 from the cluster
  • forget_cluster_node:用于从集群的节点列表中移除一个节点。
    允许从脱机节点中删除节点。这仅在所有节点都脱机并且最后一个要关闭的节点无法联机的情况下有用,从而阻止整个集群启动。它不应该在任何其他情况下使用,因为它可能会导致不一致。
  • [–offline]:可选参数。官方文档说,如果指定了这个参数,那么即使指定的节点当前无法访问(例如,因为它已经宕机或无法联网),集群也会从它的节点列表中移除该节点。如果不指定这个参数,并且指定的节点当前无法访问,那么命令可能会失败。
    但实际测试和官网有些出入,实际测试时,3个节点,手动ifdown rbt03节点的网卡,从另外2个节点均ping不同rbt03,带此参数进行操作,提示如下:
[root@rbt01 ~]# rabbitmqctl -n rabbit@rbt01 forget_cluster_node --offline rabbit@rbt03
Error: this command requires the target node to be stopped.

不带—offine 参数执行成功

[root@rbt01 ~]# rabbitmqctl -n rabbit@rbt01 forget_cluster_node rabbit@rbt03
Removing node rabbit@rbt03 from the cluster

<clusternode>:这是你要从集群中移除的节点的名称。通常,这个名称的格式是rabbit@<hostname>,其中<hostname>是节点的主机名。

使用forget_cluster_node命令时需要注意以下几点

  1. 数据丢失风险:如果你移除的节点是磁盘节点,并且上面存储了集群的元数据(例如,它是集群中的一个原始节点或它持有队列的元数据),那么这些数据将会丢失。因此,在移除节点之前,请确保你已经做好了必要的数据备份。
  2. 集群一致性:在移除节点之前,请确保集群中的其他节点都是健康的,并且集群处于一致状态。否则,移除节点可能会导致集群进入不一致状态。
  3. 停止节点:在移除节点之前,通常建议先停止该节点上的RabbitMQ服务。这可以通过rabbitmqctl stop命令来实现。然而,如果你使用了–offline参数,那么即使节点没有停止,你也可以从集群中移除它。但请注意,这样做可能会增加数据丢失的风险。
  4. 重新平衡:移除节点后,你可能需要手动重新平衡集群中的队列和连接,以确保集群的性能和可靠性。

rabbitmq-queues

cluster集群管理
默认创建的仲裁队列副本数为3(需要在web管理界面创建),即使是集群节点数大于3,比如,测试集群节点为5,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
仲裁队列增加集群节点
通过在指定节点上为所有匹配的队列添加成员(副本)来增长仲裁队列集群。

rabbitmq-queues [--node <node>] [--longnames] [--quiet] grow <node> <all | even> [--vhost-pattern <pattern>] [--queue-pattern <pattern>] [--membership <promotable|voter>]
<--node> 
用于放置副本的节点名称
<all | even> 
为所有匹配的队列或仅为成员计数为偶数的队列添加成员
--queue-pattern 
用于匹配队列名称的正则表达式
--vhost
匹配虚拟主机名的正则表达式
--membership
添加可晋升的非投票人(默认)或正式投票人
--errors-only
仅列出报告错误的队列

为所有匹配的队列,vhost为/,匹配所有queue 增加‘rbt04’副本节点
rabbitmq-queues grow "rabbit@rbt04" "all" --vhost-pattern "/" --queue-pattern ".*"

在这里插入图片描述
在这里插入图片描述
仅为副本数为偶数的队列,vhost为/,匹配所有queue, 增加‘rbt05’副本节点
在这里插入图片描述

[root@rbt01 ~]# rabbitmq-queues grow "rabbit@rbt05" "even" --vhost-pattern "/" --queue-pattern 
".*"

因使用了even参数,只匹配了偶数节点的queue-quorum-02
在这里插入图片描述
在这里插入图片描述
重新平衡仲裁队列leader所在节点
在正在运行的集群节点之间重新平衡复制队列的领导者

用法:

rabbitmq-queues [--node <node>] [--longnames] [--quiet] rebalance < all | classic | quorum | stream > [--vhost-pattern <pattern>] [--queue-pattern <pattern>]

<type>
       队列类型,必须是以下之一:all、classic、quorum、stream
--queue-pattern <pattern>
       用于匹配队列名称的正则表达式

--vhost-pattern <pattern>
       匹配虚拟主机名的正则表达式

在这里插入图片描述
对vhost /下,所有的queue,进行重新平衡leader

[root@rbt01 ~]#  rabbitmq-queues rebalance "all" --vhost-pattern "/" --queue-pattern ".*"

重新平衡后,3个队列的leader 由原来的全部为rbt01,变成了rbt01,rbt03,rbt04
在这里插入图片描述
仲裁队列减少集群节点
用法:

rabbitmq-queues [--node <node>] [--longnames] [--quiet] shrink <node> [--errors-only]
<node>
        从中删除副本的节点名称
--errors-only
        仅列出报告错误的队列
[root@rbt01 ~]# rabbitmq-queues shrink rabbit@rbt04
Shrinking quorum queues on rabbit@rbt04...
vhost   name    size    result
/       queue-quorum-03 2       ok
/       queue-quorum-01 4       ok
/       queue-quorum-02 4       ok
 [root@rbt01 ~]# rabbitmq-queues shrink rabbit@rbt05
Shrinking quorum queues on rabbit@rbt05...
vhost   name    size    result
/       queue-quorum-01 3       ok
/       queue-quorum-02 3       ok

Replication副本管理
用于队列(尤其是仲裁队列)的维护任务, 管理复制队列的副本

add_member 在给定节点上添加仲裁队列成员(副本)
在这里插入图片描述

rabbitmq-queues add_member --vhost / queue-quorum-01 rabbit@rbt04
rabbitmq-queues add_member --vhost / queue-quorum-01 rabbit@rbt05

在这里插入图片描述
delete_member删除给定节点上的仲裁队列成员(副本)。

rabbitmq-queues delete_member --vhost / queue-quorum-01 rabbit@rbt01
rabbitmq-queues delete_member --vhost / queue-quorum-01 rabbit@rbt02

在这里插入图片描述
队列监控及健康检查

  • check_if_cluster_has_classic_queue_mirroring_policy
    如果集群中有启用经典队列镜像的策略,则会以非零代码退出健康检查。自2021年以来,经典队列镜像已被弃用,并在RabbitMQ 4.0开发周期中被完全删除。
rabbitmqadmin  declare queue name=queue-classic-02 durable=true

rabbitmqctl set_policy --priority 0 --apply-to queues queue_classic_policy01 "^queue-classic-02" '{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}'

rabbitmq-queues check_if_cluster_has_classic_queue_mirroring_policy

[root@rbt01 ~]# echo $?
69

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

  • check_if_new_quorum_queue_replicas_have_finished_initial_sync
  1. 如果当前节点上有运行可升级副本的队列,则以非零代码退出健康检查。
  2. 当你使用 quorum 队列时,这是一种提供高可用性(HA)和数据一致性的队列类型。它依赖于多个队列副本(replicas)来确保消息不会丢失,并且队列可以在集群的节点之间可靠地迁移。在创建或重新配置 quorum 队列后,这些队列副本需要进行初始同步,以确保所有副本都拥有相同的消息状态。
  3. 这个操作或检查,通常是在自动化脚本或监控系统中进行的,目的是确认新添加的或重新配置的 quorum 队列副本是否完成了初始同步过程。这是非常重要的,因为只有在所有副本都同步完成后,队列才能被认为是健康且可以正常使用的。

在这里插入图片描述

  • check_if_node_is_mirror_sync_critical
    如果存在没有在线同步镜像的经典镜像队列(如果目标节点关闭,这些队列可能会丢失数据),则以非零代码退出健康检查
    在这里插入图片描述

  • check_if_node_is_quorum_critical
    如果存在具有最低在线仲裁的队列/流(如果目标节点关闭,这些队列/流将失去其仲裁),则以非零代码退出的健康检查
    在这里插入图片描述

  • list_operator_policies_with_classic_queue_mirroring
    列出启用经典队列镜像的所有操作员策略
    在这里插入图片描述

  • list_policies_with_classic_queue_mirroring
    列出启用经典队列镜像的所有策略
    在这里插入图片描述

  • peek
    rabbitmq-queues peek --vhost “a-vhost” “a-queue” “1”
    显示队列中给定位置的消息的详细信息。当前只有仲裁队列支持此命令。
    在这里插入图片描述

  • quorum_status
    查看指定的仲裁队列状态
    在这里插入图片描述
    RabbitMQ Quorum队列(Raft队列)的状态信息中, quorum_status列出的是与Raft算法相关的关键指标。

    • Last Log Index:
      表示节点Raft日志中最后一条日志条目的索引值。
      这个值反映了节点接收到的最新日志条目的位置。
    • Last Written:
      表示节点最后写入到Raft日志中的日志条目的索引值。
      在正常情况下,Last Written 应该与 Last Log Index 相同,表示所有接收到的日志条目都已经被写入。
    • Last Applied:
      表示节点最后应用到其状态机(在这个情况下是RabbitMQ队列的状态)的日志条目的索引值。
      在Raft算法中,日志条目在被提交(Commit Index)之后,才会被应用到状态机上。
      因此,Last Applied 应该小于或等于 Commit Index。
    • Commit Index:
      表示已经被集群中大多数节点(包括领导者)确认并可以安全应用到状态机的日志条目的索引值。
      一旦日志条目达到了 Commit Index,它就可以被应用到状态机上,并且这个操作是安全的,即使在未来发生领导者变更或节点故障。
    • Snapshot Index:
      表示节点最近一次创建快照时,快照中包含的日志条目的最大索引值。
      快照是一种优化技术,用于减少Raft日志的大小,并加速新节点的加入和故障恢复过程。
      如果还没有创建快照,这个值可能是 undefined 或其他表示未设置的标志。
    • Term:
      表示当前领导者或选举周期的编号。
      在Raft算法中,每当发生领导者选举时,Term 的值就会增加。
      Term 用于确保选举的安全性,防止旧的领导者在失去联系后重新成为领导者。
    • Machine Version:
      表示RabbitMQ节点上运行的Raft算法实现的版本号。
      这个值有助于了解节点是否运行了相同版本的Raft算法实现,这对于集群的一致性和兼容性很重要。
  • stream_status
    显示stream 队列的状态
    rabbitmq-queues stream_status queue-stream-01
    在这里插入图片描述

rabbitmq-diagnostics

用于诊断监测和健康检查
alarms
列出集群中的资源警报(如果有)
在这里插入图片描述

check_certificate_expiration

检查证书是否即将到期
rabbitmq-diagnostics [–node ] [–longnames] [–quiet] check_certificate_expiration [–within ] [–unit ]
–unit 指定时间单位,years,months,weeks,days
–within 时间单位的数值,比如默认是4 weeks
在这里插入图片描述
在这里插入图片描述
check_local_alarms
如果目标节点上有警报,则健康检查失败(返回非零代码)。

check_port_connectivity
如果目标节点上的任何侦听器端口无法接受由以下方式打开的新 TCP 连接,则健康检查失败(返回非零代码),该检查仅验证新的 TCP 连接是否被接受。它不执行消息传递协议握手或身份验证。
在这里插入图片描述
check_port_listener
检查指定端口是否在监听,健康检查失败(返回非零代码)
在这里插入图片描述
check_running
检查RabbitMQ节点是否正在运行。
如果 RabbitMQ 应用程序未在目标节点上运行,则健康检查失败(返回非零代码)。
在这里插入图片描述
erlang_cookie_hash
输出目标节点用于验证 CLI 工具和对等节点的共享密钥的哈希值。该值可与 CLI 工具错误消息中找到的哈希值进行比较。
在这里插入图片描述
check_if_any_deprecated_features_are_used
检查是否有不推荐的特性在使用
在这里插入图片描述
consume_event_stream
于实时消费(即接收和处理)RabbitMQ 节点的事件流。这个命令可以帮助管理员监控和调试 RabbitMQ 集群的状态和性能,因为它能够实时展示各种内部事件,比如队列的创建和删除、连接的建立与断开、消息的发布和消费等。
在这里插入图片描述
runtime_thread_stats
对间隔x秒(默认5秒)的运行时(内核)线程活动进行采样并报告
在这里插入图片描述
cluster_status
显示RabbitMQ集群的状态信息,包括节点、队列等。

memory_breakdown
显示RabbitMQ节点的内存使用情况。
在这里插入图片描述
code: Erlang虚拟机中加载的代码(字节码和模块元数据)所占用的内存。
other_system: Erlang 虚拟机内部使用的内存,不包括代码、进程堆或ETS表等。这个类别通常包括Erlang运行时的内部结构和数据。
other_proc: 与Erlang进程相关的内存,但不包括明确列出的其他进程类别(如连接、队列进程等)。
allocated_unused: 已分配但当前未使用的内存。这可能是因为内存被预先分配以优化性能,但当前未被实际使用。
other_ets: Erlang的ETS(Erlang Term Store)表使用的内存,ETS是Erlang中用于存储键值对的一种数据结构。
reserved_unallocated: 保留但尚未分配的内存。这通常是为了将来的内存需求而预留的。
atom: Erlang中的原子表使用的内存,原子是Erlang中用于存储字符串和整数的全局符号表。
plugins: RabbitMQ插件使用的内存。
metrics: 与RabbitMQ性能指标相关的内存使用。
binary: 二进制数据(如消息体)使用的内存。
mgmt_db: 管理数据库使用的内存,RabbitMQ的管理插件使用此数据库来存储配置和管理信息。
msg_index: 消息索引使用的内存,这有助于快速查找和检索消息。
metadata_store 和 metadata_store_ets: 与RabbitMQ内部元数据存储相关的内存使用。
mnesia: Mnesia数据库使用的内存,Mnesia是Erlang的一个分布式数据库管理系统,RabbitMQ使用它来持久化队列、交换机和绑定等元数据。

check_local_alarms
检查RabbitMQ节点是否有本地警报。

maybe_stuck
用于检查 RabbitMQ 节点上是否存在可能卡死的队列、通道或连接。这个命令通过分析
RabbitMQ 的内部状态,尝试识别出那些长时间没有活动或可能遇到问题的资源。
在这里插入图片描述
log_tail_stream
在这里插入图片描述
observer
观察RabbitMQ节点上Erlang VM(虚拟机)的运行状况,并提供类似UNIX top命令的信息。包括进程ID、CPU使用率、内存使用情况。
在这里插入图片描述
Ping
它会尝试与指定的 RabbitMQ 节点(通常是运行该命令所在的节点,除非你明确指定了其他节点)建立连接,并发送一个“ping”请求。如果 RabbitMQ 服务正在运行并且响应了这个请求,那么你会看到一个成功的消息,表明你能够与 RabbitMQ 节点进行通信。
在这里插入图片描述

rabbitmq-plugins

【用于插件的开闭管理】

打印插件列表
rabbitmq-plugins list
在这里插入图片描述
开启插件
在这里插入图片描述
在这里插入图片描述
禁用插件
在这里插入图片描述

rabbitmq-streams

用于流的维护任务

rabbitmq-upgrade

与升级相关的维护任务

post_upgrade
运行升级后任务。在当前版本中,它会在集群中的所有节点上执行镜像和仲裁队列的重新平衡。

await_online_quorum_plus_one
等待所有仲裁队列的在线仲裁数高于最低值。这可确保目标节点关闭时不会有任何队列失去仲裁数。

drain
将节点置于维护模式。此类节点将不会为任何客户端流量提供服务,也不会考虑托管任何队列领导者副本。

revive
使节点退出维护状态并进入常规操作模式。此类节点将再次为客户端流量提供服务,并考虑将其作为队列领导者副本放置。

rabbitmqadmin

用于通过HTTP API执行操作员任务
在开启了rabbitmq_management 插件后,可以使用以下命令下载rabbitmqadmin

创建queue

# 默认创建classic类型的queue,durable设置为true,开启持久化
rabbitmqadmin -H localhost -u guest -p guest declare queue name=my_queue durable=true

# 创建quorum类型队列,并开启持久化
rabbitmqadmin declare queue name=queue_quorum_02 durable=true arguments='{"x-queue-type": "quorum"}'

删除queue

rabbitmqadmin delete queue name=queue-t1-rabbitmq-test

创建exchange

rabbitmqadmin  declare exchange name=my_exchange-01 type=direct durable=true

绑定exchange和queue并制定routing_key

rabbitmqadmin -u guest -p guest declare binding source=my_exchange destination=my_queue routing_key=my_routing_key

查看绑定

rabbitmqadmin list bindings

设置classic队列镜像复制策略

rabbitmqadmin declare policy name=ha-three-replicas pattern="^queue_name$" definition='{"ha-mode":"exactly","ha-params":3,"ha-sync-mode":"automatic"}' apply-to=queues

列出镜像策略

rabbitmqadmin list policies

发布消息

rabbitmqadmin publish routing_key=t1_queue_01 payload="hello world 001"

使用路由转发消息

rabbitmqadmin publish routing_key=t1_queue_01 exchange=topic-exchanges-03 payload="hello world 002" 

查看消息,不消费

rabbitmqadmin get queue=t1_queue_01

清空队列中的消息

rabbitmqadmin purge queue name=queue-quorum-01

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2296344.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

傅里叶单像素成像技术研究进展

摘要&#xff1a;计算光学成像&#xff0c;通过光学系统和信号处理的有机结合与联合优化实现特定成像特性的成像系统&#xff0c;摆脱了传统成像系统的限制&#xff0c;为光学成像技术添加了浓墨重彩的一笔&#xff0c;并逐步向简单化与智能化的方向发展。单像素成像(Single-Pi…

MariaDB *MaxScale*实现mysql8读写分离

1.MaxScale 是干什么的&#xff1f; MaxScale是maridb开发的一个mysql数据中间件&#xff0c;其配置简单&#xff0c;能够实现读写分离&#xff0c;并且可以根据主从状态实现写库的自动切换&#xff0c;对多个从服务器能实现负载均衡。 2.MaxScale 实验环境 中间件192.168.12…

计算机毕业设计Spark+大模型知网文献论文推荐系统 知识图谱 知网爬虫 知网数据分析 知网大数据 知网可视化 预测系统 大数据毕业设计 机器学习

温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 温馨提示&#xff1a;文末有 CSDN 平台官方提供的学长联系方式的名片&#xff01; 作者简介&#xff1a;Java领…

padding: 20rpx 0rpx 20rpx 20rpx(上、右、下、左的填充(顺时针方向))

CSS样式 padding: 20rpx 0rpx 20rpx 20rpx; 用于设置元素的填充区域。以下是对每个值的详细解释&#xff1a; 20rpx&#xff08;上边距&#xff09;&#xff1a;设置元素顶部的填充为20rpx。0rpx&#xff08;右边距&#xff09;&#xff1a;设置元素右侧的填充为0rpx。20rpx&a…

微信小程序如何使用decimal计算金额

第三方库地址&#xff1a;GitHub - MikeMcl/decimal.js: An arbitrary-precision Decimal type for JavaScript 之前都是api接口走后端计算&#xff0c;偶尔发现这个库也不错&#xff0c;计算简单&#xff0c;目前发现比较准确 上代码 导入js import Decimal from ../../uti…

【AI学习】关于 DeepSeek-R1的几个流程图

遇见关于DeepSeek-R1的几个流程图&#xff0c;清晰易懂形象直观&#xff0c;记录于此。 流程图一 来自文章《Understanding Reasoning LLMs》&#xff0c; 文章链接&#xff1a;https://magazine.sebastianraschka.com/p/understanding-reasoning-llms?continueFlagaf07b1a0…

C++模板编程——typelist的实现

文章最后给出了汇总的代码&#xff0c;可直接运行 1. typelist是什么 typelist是一种用来操作类型的容器。和我们所熟知的vector、list、deque类似&#xff0c;只不过typelist存储的不是变量&#xff0c;而是类型。 typelist简单来说就是一个类型容器&#xff0c;能够提供一…

数据可视化与交互融合:APP 界面设计的新维度

在数字化浪潮汹涌的当下&#xff0c;APP 已成为人们生活和工作中不可或缺的工具。如何在众多 APP 中脱颖而出&#xff0c;界面设计至关重要。而数据可视化与交互的融合&#xff0c;正为 APP 界面设计开辟了全新的维度。 数据可视化&#xff0c;简单来说&#xff0c;就是将复杂…

控制论与信息论:维纳和香农的核心分歧在于对「信息本质」的理解

控制论与信息论&#xff1a;维纳和香农的核心分歧在于对「信息本质」的理解 核心结论 控制论是「系统的方向盘」&#xff0c;通过反馈调节实现目标信息论是「信息的尺子」&#xff0c;量化信息传输的精度与效率根本分歧&#xff1a;维纳认为信息是「系统维持秩序的工具」&…

Baklib优化数字化内容管理用科技提升商业效率与增值潜力

内容概要 在当今数字化迅速发展的时代&#xff0c;数字化内容管理已成为企业提升竞争力的重要手段。Baklib作为一款强大的智能优化内容管理系统&#xff0c;通过先进的科技手段&#xff0c;帮助企业在内容管理和数据整合方面实现高效运作。Baklib 是什么类型的工具&#xff0c…

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码及效果展示

一个基于ESP32S3和INMP441麦克风实现音频强度控制RGB灯带律动的代码示例&#xff0c;使用Arduino语言&#xff1a; 硬件连接 INMP441 VCC → ESP32的3.3VINMP441 GND → ESP32的GNDINMP441 SCK → ESP32的GPIO 17INMP441 WS → ESP32的GPIO 18INMP441 SD → ESP32的GPIO 16RG…

利用二分法进行 SQL 时间盲注

什么是时间盲注&#xff1f; SQL 盲注&#xff08;Blind SQL Injection&#xff09;是一种常见的 Web 安全漏洞&#xff0c;其中时间盲注是基于查询延迟的 SQL 注入方式。当服务器不返回可见的错误信息时&#xff0c;我们可以利用 SLEEP() 函数来判断查询结果是否符合预期。 …

基于STM32的声纹识别智能门锁

一、项目背景与意义 行业痛点&#xff1a;传统指纹锁存在表皮磨损识别失败风险&#xff0c;声纹具备活体检测特性 技术优势&#xff1a; - 采用MFCC&#xff08;梅尔频率倒谱系数&#xff09;替代传统FFT&#xff0c;提升说话人特征区分度 - 动态时间规整(DTW)算法解决语…

在CT107D单片机综合训练平台上实现外部中断控制LED闪烁

引言 在单片机开发中&#xff0c;外部中断是一个非常重要的功能&#xff0c;它可以让单片机在检测到外部信号变化时立即做出响应。本文将详细介绍如何在CT107D单片机综合训练平台上使用外部中断来控制LED灯的闪烁。我们将使用两种不同的方式来实现这一功能&#xff1a;一种是在…

C++ Primer 类型转换

欢迎阅读我的 【CPrimer】专栏 专栏简介&#xff1a;本专栏主要面向C初学者&#xff0c;解释C的一些基本概念和基础语言特性&#xff0c;涉及C标准库的用法&#xff0c;面向对象特性&#xff0c;泛型特性高级用法。通过使用标准库中定义的抽象设施&#xff0c;使你更加适应高级…

Visual Studio Code中文出现黄色框子的解决办法

Visual Studio Code中文出现黄色框子的解决办法 一、vsCode中文出现黄色框子-如图二、解决办法 一、vsCode中文出现黄色框子-如图 二、解决办法 点击 “文件”点击 “首选项”点击 “设置” 搜索框直接搜索unicode选择“文本编辑器”&#xff0c;往下滑动&#xff0c;找到“Un…

“可通过HTTP获取远端WWW服务信息”漏洞修复

环境说明&#xff1a;①操作系统&#xff1a;windows server&#xff1b;②nginx&#xff1a;1.27.1。 1.漏洞说明 “可通过HTTP获取远端WWW服务信息”。 修复前&#xff0c;在“响应标头”能看到Server信息&#xff0c;如下图所示&#xff1a; 修复后&#xff0c;“响应标头…

CAD 屏幕进度条

参考鸿视频实现&#xff0c;代码如下&#xff1a; 主类 using System.IO.Ports; using System.Threading; using System.Windows.Controls; using static IFoxDemo.进度条class; using static System.Windows.Forms.VisualStyles.VisualStyleElement.TrackBar;//[assembly: C…

小红书爬虫: 获取所需数据

小红书&#xff0c;又名 “小红书 ”或简称 “红”&#xff0c;已迅速成为中国社交和电子商务领域的重要参与者&#xff0c;成为一个不可或缺的平台。对于企业、营销人员和数据分析师来说&#xff0c;从小红书收集数据可以获得宝贵的洞察力&#xff0c;从而推动业务增长。虽然这…

使用sunshine和moonlight串流时的音频输出问题

设备&#xff1a;电脑和平板串流&#xff0c;把平板当副屏使用 1.如果启用安装steam音频驱动程序&#xff0c;则平板有声&#xff0c;电脑无声&#xff0c;在moonlight端可以设置平板和电脑同时发声&#xff0c;但是有点卡 2.只想电脑发声&#xff0c;平板无声 禁用安装steam…