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

文章目录

    • 使用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 ...
BasicsCluster name: rabbitmq-cluster-01
Total CPU cores available cluster-wide: 12Disk Nodesrabbit@rbt02
rabbit@rbt03RAM Nodesrabbit@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=truerabbitmqctl 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.rhkb.cn/news/13719.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

PlanLLM: 首个支持开放词汇与封闭集任务的跨模态视频程序规划框架

2025年1月7号&#xff0c;由杨德杰、赵子敬、刘洋联合提出PlanLLM&#xff0c;一种基于可微调大型语言模型&#xff08;LLM&#xff09;的跨模态联合学习框架&#xff0c;用于解决视频程序规划任务。通过引入LLM增强规划模块和互信息最大化模块&#xff0c;PlanLLM突破了现有方…

WGCLOUD监控系统部署教程

官网地址&#xff1a;下载WGCLOUD安装包 - WGCLOUD官网 第一步、环境配置 #安装jdk 1、安装 EPEL 仓库&#xff1a; sudo yum install -y epel-release 2、安装 OpenJDK 11&#xff1a; sudo yum install java-11-openjdk-devel 3、如果成功&#xff0c;你可以通过运行 java …

6-图像金字塔与轮廓检测

文章目录 6.图像金字塔与轮廓检测(1)图像金字塔定义(2)金字塔制作方法(3)轮廓检测方法(4)轮廓特征与近似(5)模板匹配方法6.图像金字塔与轮廓检测 (1)图像金字塔定义 高斯金字塔拉普拉斯金字塔 高斯金字塔:向下采样方法(缩小) 高斯金字塔:向上采样方法(放大)…

DeepSeek-V3 与 DeepSeek R1 对比分析:技术与应用的全面解析

一、背景 在当今科技飞速发展的时代&#xff0c;深度学习技术如同一股强大的浪潮&#xff0c;席卷了自然语言处理&#xff08;NLP&#xff09;、计算机视觉&#xff08;CV&#xff09;以及多模态模型等众多领域。从智能语音助手到图像识别技术&#xff0c;从文本生成工具到多模…

基于 Spring Cloud + Spring AI + VUE 的知识助理平台介绍以及问题

前言&#xff08;一些废话&#xff09; 在看这篇文章的各位大佬&#xff0c;感谢你们留出几分钟时间&#xff0c;来看这个产品介绍&#xff0c;其实重点说实话&#xff0c;不是这个产品怎么样。而是在最后有一个郁结在心里的几个问题&#xff0c;希望大佬们能给出一些建议。万…

IEEE 802.3/802.2 | LLC / SNAP

注&#xff1a;本文为 “IEEE 802.3/802.2 | LLC / SNAP” 相关文章合辑。 未整理去重。 第三篇部分内容出自第二篇。 802.2 协议 haoay321 2010-01-28 20:52:02 LLC 协议 LLC&#xff08;Logic Link Control&#xff0c;逻辑链路控制&#xff09;是 IEEE 802.2 协议中规定…

【Elasticsearch】Geo-distance聚合

geo_distance聚合的形状是圆形。它基于一个中心点&#xff08;origin&#xff09;和一系列距离范围来计算每个文档与中心点的距离&#xff0c;并将文档分配到相应的距离范围内。这种聚合方式本质上是以中心点为圆心&#xff0c;以指定的距离范围为半径的圆形区域来划分数据。 为…

Chapter 4-1. Troubleshooting Congestion in Fibre Channel Fabrics

This chapter covers the following topics: 本章包括以下内容: Congestion troubleshooting methodology and workflow. Hints and tips for troubleshooting congestion. Cisco MDS NX-OS commands for troubleshooting congestion. Case studies demonstrating troubleshoo…

【字节青训营-7】:初探 Kitex 字节微服务框架(使用ETCD进行服务注册与发现)

本文目录 一、Kitex概述二、第一个Kitex应用三、IDL四、服务注册与发现 一、Kitex概述 长话短说&#xff0c;就是字节跳动内部的 Golang 微服务 RPC 框架&#xff0c;具有高性能、强可扩展的特点&#xff0c;在字节内部已广泛使用。 如果对微服务性能有要求&#xff0c;又希望…

设计模式Python版 享元模式

文章目录 前言一、享元模式二、享元模式示例 前言 GOF设计模式分三大类&#xff1a; 创建型模式&#xff1a;关注对象的创建过程&#xff0c;包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式&#xff1a;关注类和对象之间的组合&…

蓝桥杯嵌入式备赛(三)—— LED +按键 + LCD

目录 一、LED1、原理图介绍2、程序代码 二、按键1、原理图介绍2、程序代码 三、LCD1、原理图介绍2、程序代码 一、LED 1、原理图介绍 如果所示&#xff0c;STM32G431RBT6中有八个LED&#xff0c;由八个GPIO控制&#xff0c;分别为PC8-15&#xff0c;当输出为低电平时点亮。其中…

IDEA 中集成 Maven,配置环境、创建以及导入项目

目录 在 IntelliJ IDEA 中集成 Maven 并配置环境 1. 打开 IDEA 设置 2. 定位 Maven 配置选项 3. 配置 Maven 路径 4. 应用配置 创建 Maven 项目 1. 新建项目 2. 选择项目类型 3. 配置项目信息 4. 确认 Maven 设置 5. 完成项目创建 导入 Maven 项目 1. 打开导入窗口…

javaEE-6.网络原理-http

目录 什么是http? http的工作原理&#xff1a; 抓包工具 fiddler的使用 HTTP请求数据: 1.首行:​编辑 2.请求头(header) 3.空行&#xff1a; 4.正文&#xff08;body&#xff09; HTTP响应数据 1.首行&#xff1a;​编辑 2.响应头 3.空行&#xff1a; 4.响应正文…

链式结构二叉树(递归暴力美学)

文章目录 1. 链式结构二叉树1.1 二叉树创建 2. 前中后序遍历2.1 遍历规则2.2 代码实现图文理解 3. 结点个数以及高度等二叉树结点个数正确做法&#xff1a; 4. 层序遍历5. 判断是否完全二叉树 1. 链式结构二叉树 完成了顺序结构二叉树的代码实现&#xff0c;可以知道其底层结构…

复制粘贴小工具——Ditto

在日常工作中&#xff0c;复制粘贴是常见的操作&#xff0c;但Windows系统自带的剪贴板功能较为有限&#xff0c;只能保存最近一次的复制记录&#xff0c;这对于需要频繁复制粘贴的用户来说不太方便。今天&#xff0c;我们介绍一款开源、免费且功能强大的剪贴板增强工具——Dit…

【Unity3D小功能】Unity3D中实现超炫按钮悬停效果

推荐阅读 CSDN主页GitHub开源地址Unity3D插件分享QQ群&#xff1a;398291828小红书小破站 大家好&#xff0c;我是佛系工程师☆恬静的小魔龙☆&#xff0c;不定时更新Unity开发技巧&#xff0c;觉得有用记得一键三连哦。 一、前言 先来看一下效果图&#xff1a; 感觉这种效果…

优化深度神经网络

训练集、开发集(验证集)、测试集 偏差与方差 正则化 L2正则 Dropout 随机丢弃部分神经元输入&#xff0c;经常用于计算机视觉的神经网络内&#xff0c;因为通常没有足够的训练数据&#xff0c;很容易出现过拟合的问题 数据增强 训练集规一化 可以使其图像更均匀&#xff0c;…

从java角度对比nodejs、fastapi,同步和异步区别

我之前一直用java语言编程&#xff0c;最近一年用python fastapi和nodejs nestjs开发了一些项目&#xff0c;站在java程序员的角度谈谈异步编程和同步编程的区别&#xff0c;主要在两方面 处理请求&#xff0c;java常用的tomcat是多线程处理请求并执行代码&#xff0c;同步阻塞…

《图解设计模式》笔记(五)一致性

十一、Composite模式&#xff1a;容器与内容的一致性 像文件夹与文件一样&#xff0c;文件夹中可以放子文件夹与文件&#xff0c;再比如容器中可以放更小的容器和具体内容。 Composite模式&#xff1a;使容器与内容具有一致性&#xff0c;创造出递归结构。 Composite&#x…

爬虫学习笔记之Robots协议相关整理

定义 Robots协议也称作爬虫协议、机器人协议&#xff0c;全名为网络爬虫排除标准&#xff0c;用来告诉爬虫和搜索引擎哪些页面可以爬取、哪些不可以。它通常是一个叫做robots.txt的文本文件&#xff0c;一般放在网站的根目录下。 robots.txt文件的样例 对有所爬虫均生效&#…