当前位置: 首页 > news >正文

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

相关文章:

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

文章目录 使用CLI管理RabbitMQrabbitmqctlrabbitmq-queuesrabbitmq-diagnosticsrabbitmq-pluginsrabbitmq-streamsrabbitmq-upgraderabbitmqadmin 使用CLI管理RabbitMQ RabbitMQ CLI 工具需要安装兼容的 Erlang/OTP版本。 这些工具假定系统区域设置为 UTF-8&#xff08;例如en…...

BurpSuite抓包与HTTP基础

文章目录 前言一、BurpSuite1.BurpSuite简介2.BurpSuite安装教程(1)BurpSuite安装与激活(2)安装 https 证书 3.BurpSuite使用4.BurpSuite资料 二、图解HTTP1.HTTP基础知识2.HTTP客户端请求消息3.HTTP服务端响应消息4.HTTP部分请求方法理解5.HTTPS与HTTP 总结 前言 在网络安全和…...

SQL Server 数据库迁移到 MySQL 的完整指南

文章目录 引言一、迁移前的准备工作1.1 确定迁移范围1.2 评估兼容性1.3 备份数据 二、迁移工具的选择2.1 使用 MySQL Workbench2.2 使用第三方工具2.3 手动迁移 三、迁移步骤3.1 导出 SQL Server 数据库结构3.2 转换数据类型和语法3.3 导入 MySQL 数据库3.4 迁移数据3.5 迁移存…...

【大模型】DeepSeek与chatGPT的区别以及自身的优势

目录 一、前言二、核心技术对比2.1 模型架构设计2.1.1 ChatGPT的Transformer架构2.1.2 DeepSeek的混合架构 2.2 训练数据体系2.2.1 ChatGPT的数据特征2.2.2 DeepSeek的数据策略 三、应用场景对比3.1 通用场景表现3.1.1 ChatGPT的强项领域3.2.2 DeepSeek的专项突破 3.3 响应效率…...

DeepSeek:知识图谱与大模型参数化知识融合的创新架构

引言&#xff1a;AI 领域的融合趋势 在目前大模型与知识图谱作为两个重要的研究方向&#xff0c;各自展现出了强大的能力与潜力。大模型&#xff0c;凭借其在海量数据上的深度训练&#xff0c;拥有强大的语言理解与生成能力&#xff0c;能够处理多种自然语言处理任务&#xff0…...

ES6 迭代器 (`Iterator`)使用总结

Iterator&#xff08;迭代器&#xff09;是 ES6 引入的一种 接口&#xff0c;用于 顺序访问 可迭代对象&#xff08;Array、Set、Map、String、arguments、自定义对象等&#xff09;。 Iterator&#xff08;迭代器&#xff09;的作用有三个&#xff1a; 为各种数据结构提供一个…...

信用修复和失联修复的区别

失联修复和信用修复是两个不同的概念&#xff0c;在目的、操作方式和应用场景上都有所区别。 失联修复 失联修复主要是指在金融催收行业中&#xff0c;当债务人的联系方式&#xff08;通常是手机号码&#xff09;发生改变&#xff0c;导致无法联系到债务人时&#xff0c;催收公…...

2025蓝桥杯JAVA编程题练习Day3

1.黛玉泡茶【算法赛】 问题描述 话说林黛玉闲来无事&#xff0c;打算在潇湘馆摆个茶局&#xff0c;邀上宝钗、探春她们一起品茗赏花。黛玉素来讲究&#xff0c;用的茶杯也各有不同&#xff0c;大的小的&#xff0c;高的矮的&#xff0c;煞是好看。这不&#xff0c;她从柜子里…...

[论文阅读] Knowledge Fusion of Large Language Models

Knowledge Fusion of Large Language Models (FuseLLM) Methodology 整体Pipeline如下图所示 不同的动物代表不同的LLM。左边第一&#xff0c;第二分别是Ensemble以及Weight Merging方法。最右侧为本文提出的FuseLLM。 Ensemble: 融合多个models的预测结果&#xff0c;比如…...

deepseek来讲lua

Lua 是一种轻量级、高效、可嵌入的脚本语言&#xff0c;广泛应用于游戏开发、嵌入式系统、Web 服务器等领域。以下是 Lua 的主要特点和一些基本概念&#xff1a; 1. 特点 轻量级&#xff1a;Lua 的核心非常小&#xff0c;适合嵌入到其他应用程序中。高效&#xff1a;Lua 的执…...

探索 Spring Cloud Alibaba:开启微服务架构新时代

一、引言 在当今数字化浪潮中&#xff0c;软件系统的规模和复杂度不断攀升&#xff0c;传统的单体架构逐渐难以满足快速迭代、高并发处理以及灵活扩展的需求。微服务架构应运而生&#xff0c;它将一个大型的应用拆分成多个小型、自治的服务&#xff0c;每个服务专注于特定的业务…...

【数据结构】(6) LinkedList 链表

一、什么是链表 1、链表与顺序表对比 不同点LinkedListArrayList物理存储上不连续连续随机访问效率O(N)O(1&#xff09;插入、删除效率O(1)O(N) 3、链表的分类 链表根据结构分类&#xff0c;可分为单向/双向、无头结点/有头节点、非循环/循环链表&#xff0c;这三组每组各取…...

【工具变量】上市公司企业渐进式创新程度及渐进式创新锁定数据(1991-2023年)

测算方式&#xff1a; 参考顶刊《经济研究》孙雅慧&#xff08;2024&#xff09;老师的做法&#xff0c;用当期创新和往期创新的内容重叠度作为衡量渐进式创新程度的合理指标。通过搜集海量专利摘要&#xff0c;测算当前专利申请和既有专利的内容相似度&#xff0c;反映企业在…...

07_任务状态——改进播放控制

一、声明 在05和06的程序里面可以达到的一个效果就是很完美的播放音乐&#xff0c;并且不会影响到其它任务的运行&#xff0c;但是这个代码有一个弊端就是要么创建任务从头开始播放要么就直接删除任务。 我们现在的程序就增加了音乐的暂停和恢复的功能&#xff0c;那么能够达到…...

【R语言】apply函数族

在R语言中使用循环操作时是使用自身来实现的&#xff0c;效率较低。所以R语言有一个符合其统计语言出身的特点&#xff1a;向量化。R语言中的向量化运用了底层的C语言&#xff0c;而C语言的效率比高层的R语言的效率高。 apply函数族主要是为了解决数据向量化运算的问题&#x…...

Retrieval-Augmented Generation,检索增强生成流程

RAG流程 用户输入接收 系统接收用户输入的查询问题或文本内容&#xff0c;例如“李白有哪些著名的作品&#xff1f;”用户输入可以通过自然语言处理&#xff08;NLP&#xff09;模型的输入端口或用户交互界面&#xff08;如聊天应用、搜索引擎输入框等&#xff09;接收。 查询…...

[AI][本地部署]离线升级后报ChromeDb错误

【背景】 升级了OpenWebUI&#xff0c;在离线环境下补足了很多需要的Package后终于成功启动了Backend的服务&#xff0c;但是一旦上传文件&#xff0c;就会报ChromaDb错误&#xff0c;少了Collection这一列云云。 【分析】 两个环境ChromaDb的版本不同&#xff0c;所以怀疑是…...

Pinocchio: 刚体动力学算法库介绍

Pinocchio 是一个高性能的开源刚体动力学计算库&#xff0c;广泛应用于机器人学研究与开发。它主要致力于提供高效、精确的运动学和动力学算法&#xff0c;实现机器人模型的建模、前向运动学、反向动力学、力动力学计算等功能。下面将详细介绍该库的一些关键特点和应用场景。 基…...

电商平台的设计与实现(代码+数据库+LW)

摘 要 如今社会上各行各业&#xff0c;都喜欢用自己行业的专属软件工作&#xff0c;互联网发展到这个时候&#xff0c;人们已经发现离不开了互联网。新技术的产生&#xff0c;往往能解决一些老技术的弊端问题。因为传统商品交易信息管理难度大&#xff0c;容错率低&#xff0…...

c#对接deepseek 聊天AI接口

注意&#xff1a;不是免费 对接文档&#xff1a;对话补全 | DeepSeek API Docs 注册地址&#xff1a;DeepSeek 申请key 在线请求示例 apifox deepseek - deepseek...

Deepseek基座:Deepseek-v2核心内容解析

DeepSeek原创文章1 DeepSeek-v3&#xff1a;基于MLA的高效kv缓存压缩与位置编码优化技术 2 Deepseek基座&#xff1a;DeepSeek LLM核心内容解析 3 Deepseek基座&#xff1a;Deepseek MOE核心内容解析 4 Deepseek基座&#xff1a;Deepseek-v2核心内容解析 5Deepseek基座&#xf…...

Redis专题-基础篇

题记 本文涵盖了Redis的各种数据结构和命令&#xff0c;Redis的各种常见Java客户端的应用和最佳实践 jedis案例github地址&#xff1a;https://github.com/whltaoin/fedis_java_demo SpringbootDataRedis案例github地址&#xff1a;https://github.com/whltaoin/springbootData…...

详细讲解Flutter GetX的使用

Flutter GetX 框架详解&#xff1a;状态管理、路由与依赖注入 GetX 是 Flutter 生态中一款强大且轻量级的全功能框架&#xff0c;集成了状态管理、路由管理和依赖注入三大核心功能。其设计理念是简洁高效&#xff0c;通过最小的代码实现最大的功能&#xff0c;特别适合快速开发…...

Python项目中添加环境配置文件

在Python项目中添加配置文件有多种方式&#xff0c;每种方式对应不同的依赖包和读取方法。以下是 7种主流配置管理方案&#xff0c;包含安装命令、配置示例和变量读取方法&#xff1a; 1. .env 文件&#xff08;推荐简单项目&#xff09; 依赖包: python-dotenv pip install …...

Global Security Market知识点总结:主经纪商业务

在全球证券市场的复杂体系中&#xff0c;主经纪商业务&#xff08;Prime Brokerage&#xff09;占据着独特且关键的位置。这一业务为大型机构投资者提供了一系列至关重要的服务&#xff0c;极大地影响着金融市场的运作与发展。 一、主经纪商业务的定义 主经纪商业务是投资银行…...

【PDF PicKiller】PDF批量删除固定位置图片工具,默认解密,可去一般图、背景图、水印图!

PDF批量删除固定位置图片工具 PDF PicKiller <center>PDF PicKiller [Download](https://github.com/Peaceful-World-X/PDF-PicKiller)&#x1f929; 工具介绍&#x1f973; 主要功能&#x1f92a; 软件使用&#x1f92a; 参数解释&#x1f92a; 关键代码&#x1f929; 项…...

【大模型:知识图谱】--3.py2neo连接图数据库neo4j

【图数据库】--Neo4j 安装_neo4j安装-CSDN博客 需要打开图数据库Neo4j&#xff0c; neo4j console 目录 1.图数据库--连接 2.图数据库--操作 2.1.创建节点 2.2.删除节点 2.3.增改属性 2.4.建立关系 2.5.查询节点 2.6.查询关系 3.图数据库--实例 1.图数据库--连接 fr…...

Ubuntu2404 下搭建 Zephyr 开发环境

1. 系统要求 操作系统&#xff1a;Ubuntu2404&#xff08;64位&#xff09;磁盘空间&#xff1a;至少 8GB 可用空间&#xff08;Zephyr 及其工具链较大&#xff09; 2. 安装必要工具 Tool Min. Version CMake 3.20.5 Python 3.10 Devicetree compiler 1.4.6 2.1 安装系…...

Pandas 技术解析:从数据结构到应用场景的深度探索

序 我最早用Python做大数据项目时&#xff0c;接触最早的就是Pandas了。觉得对于IT技术人员而言&#xff0c;它是可以属于多场景的存在&#xff0c;因为它的本身就是数据驱动的技术生态中&#xff0c;对于软件工程师而言&#xff0c;它是快速构建数据处理管道的基石&#xff1…...

视觉SLAM基础补盲

3D Gaussian Splatting for Real-Time Radiance Field Rendering SOTA方法3DGS contribution传统重建基于点的渲染NeRF 基础知识补盲光栅化SFM三角化极线几何标准的双目立体视觉立体匹配理论与方法立体匹配的基本流程李群和李代数 李群和李代数的映射李代数的求导李代数解决求导…...