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命令时需要注意以下几点:
- 数据丢失风险:如果你移除的节点是磁盘节点,并且上面存储了集群的元数据(例如,它是集群中的一个原始节点或它持有队列的元数据),那么这些数据将会丢失。因此,在移除节点之前,请确保你已经做好了必要的数据备份。
- 集群一致性:在移除节点之前,请确保集群中的其他节点都是健康的,并且集群处于一致状态。否则,移除节点可能会导致集群进入不一致状态。
- 停止节点:在移除节点之前,通常建议先停止该节点上的RabbitMQ服务。这可以通过rabbitmqctl stop命令来实现。然而,如果你使用了–offline参数,那么即使节点没有停止,你也可以从集群中移除它。但请注意,这样做可能会增加数据丢失的风险。
- 重新平衡:移除节点后,你可能需要手动重新平衡集群中的队列和连接,以确保集群的性能和可靠性。
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
- 如果当前节点上有运行可升级副本的队列,则以非零代码退出健康检查。
- 当你使用 quorum 队列时,这是一种提供高可用性(HA)和数据一致性的队列类型。它依赖于多个队列副本(replicas)来确保消息不会丢失,并且队列可以在集群的节点之间可靠地迁移。在创建或重新配置 quorum 队列后,这些队列副本需要进行初始同步,以确保所有副本都拥有相同的消息状态。
- 这个操作或检查,通常是在自动化脚本或监控系统中进行的,目的是确认新添加的或重新配置的 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算法实现,这对于集群的一致性和兼容性很重要。
- Last Log Index:
-
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(例如en…...
2025软件授权与保护领域的新趋势
2024年对威步而言是一个重要的里程碑——公司成立35年以来,一直专注于软件安全及软件授权管理,以保护企业的数字资产与知识产权。展望2025年,数字资产盗窃、数据泄露与网络犯罪等威胁仍在持续增长,威步将在新的形势下继续推动技术…...
线段树(点修,区查,区修)
文章目录 什么是线段树?线段树能够解决什么样的问题?模板 什么是线段树? 线段树是一种二叉搜索树,而二叉搜索树,首先满足二叉树,即每个结点最多有两颗子树,并且是一颗搜索树,我们要知…...
深度学习 - 神经网络的原理
## 深度学习 - 神经网络的原理 深度学习是机器学习的一个分支,其核心是模拟人脑神经网络的结构和功能,构建多层的神经网络模型,从数据中学习特征并进行预测或分类。 **神经网络的基本原理:** 1. **神经元模型:** * 神经网…...
DeepSeek辅助段落扩写的能力怎么样?
DeepSeek-R1在学术写作的诸多细节层面展现出了显著的应用价值。接下来我们将通过一系列具体案例,深入探讨该工具如何在扩写、翻译、发表以及内容改进等关键环节为学术写作提供有力支持。在提问环节,DeepSeek-R1能够高效地简化提示词,并精准地…...
深入Linux系列之进程地址空间
深入Linux系列之进程地址空间 1.引入 那么在之前的学习中,我们知道我们创建一个子进程的话,我们可以在代码层面调用fork函数来创建我们的子进程,那么fork函数的返回值根据我们当前所处进程的上下文是返回不同的值,它在父进程中返…...
虚拟DOM与Diff算法:Vue如何高效更新UI?
虚拟DOM与Diff算法:Vue如何高效更新UI? 虚拟DOM与Diff算法:Vue如何高效更新UI?什么是虚拟DOM?定义虚拟DOM的优势 Diff算法:如何高效计算UI差异定义核心思想Diff算法的步骤示例代码 Vue中的虚拟DOM与Diff算法…...
Golang 并发机制-6:掌握优雅的错误处理艺术
并发编程可能是提高软件系统效率和响应能力的一种强有力的技术。它允许多个工作负载同时运行,充分利用现代多核cpu。然而,巨大的能力带来巨大的责任,良好的错误管理是并发编程的主要任务之一。 并发代码的复杂性 并发编程增加了顺序程序所不…...
【MySQL】第二弹---数据库基础全解析:从概念到实践的深度探索
✨个人主页: 熬夜学编程的小林 💗系列专栏: 【C语言详解】 【数据结构详解】【C详解】【Linux系统编程】【MySQL】 目录 1. 数据库基础 1.1 什么是数据库 1.2 主流数据库 1.3 基本使用 1.3.1 MySQL安装 1.3.2 连接服务器 1.3.3 服务器…...
c++计算机教程
目的 做出-*/%计算机 要求 做出可以计算-*/%的计算机 实现 完整代码 #include<bits/stdc.h> int main() {std::cout<<"加 减- 乘* 除/ 取余% \没有了|(因为可以算三位)"<<"\n"<<"提示:每打完一个符号或打完一个数,\…...
win32汇编环境,对话框程序中自定义工具栏的使用示例三
;运行效果 ;win32汇编环境,对话框程序中自定义工具栏的使用示例三 ;这次是竖着的,以下为生成48*48大小的自定义工具栏图标,自已设计图标样式,显得更专业点。 ;原理是,先生成工具栏控件,再生成图像列表,然后弄几个图标加入图像列表,再把图像列表与工具栏控件关联。需留意…...
集合类不安全问题
ArrayList不是线程安全类,在多线程同时写的情况下,会抛出java.util.ConcurrentModificationException异常 解决办法: 1.使用Vector(ArrayList所有方法加synchronized,太重) 2.使用Collections.synchronized…...
怎么使用Cursor以及升级Cursor pro会员
什么是cursor Cursor:结合AI技术的代码编辑器,助力开发者提升编码效率与质量。作为Visual Studio Code的一个衍生版本,Cursor继承了其用户熟知的界面和插件兼容性,并加入了革命性的AI特性。这款编辑器自2023年1月推出以来&#x…...
启用gui,启动图形化界面
1、停止服务 2、开启maxscale GUI ,修改主配置文件(增加框框内两行) 3、启动服务 注:如果出现以下启动不成功 考虑权限问题 4、访问http://ip:8989 用户名/密码:admin/mariadb...
03-移除元素
给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素。元素的顺序可能发生改变。然后返回 nums 中与 val 不同的元素的数量。 假设 nums 中不等于 val 的元素数量为 k,要通过此题,您需要执行以下操作: 更改…...
LSSVM最小二乘支持向量机多变量多步光伏功率预测(Matlab)
代码下载:LSSVM最小二乘支持向量机多变量多步光伏功率预测(Matlab) LSSVM最小二乘支持向量机多变量多步光伏功率预测 一、引言 1.1、研究背景与意义 随着全球能源危机和环境问题的日益严重,可再生能源的开发利用成为了世界各国…...
使用Vue开发可复用的Web Components:跨框架组件封装指南
使用Vue开发可复用的Web Components:跨框架组件封装指南 使用Vue开发可复用的Web Components:跨框架组件封装指南引言什么是Web Components?为什么选择Vue开发Web Components? 封装跨框架组件的步骤1. 创建基本的Vue组件2. 将Vue组…...
用AI写游戏1——js实现贪吃蛇
使用模型通义千问 提示词: 用js html css 做一个贪吃蛇的动画 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Snake Game</title><link rel"stylesheet" href"c…...
星闪开发入门级教程之安装编译器与小项目烧录
系列文章目录 星闪开发入门级教程 好久不见,已经好几年没有发文章了,星闪-作为中国原生的新一代近距离无线联接技术品牌。我想着写点东西。为了适合新手,绝对小白文。 文章目录 系列文章目录前言一、Hispark Studio1.安装Hispark Studio2.安…...
java求职学习day32
JavaScript 详解 课程目标: 1 、 JavaScript 介绍 2 、 HTML 和 JavaScript 结合方式 3 、 JavaScript 的使用 4 、 DOM 操作 5 、 BOM 操作 1. JavaScript介绍 (1)虽然是 java 作为前缀,但 java 和 javascript 的关系,就像老婆和老婆…...
【Markdown语法】锚点机制:跳转任意位置
最近写文章时,发现有一个需求:想要实现一种点击跳转到文档中任意位置的功能,这就是锚点机制,就像游戏中的传送锚点,于是写成文章记录一下使用方式。 本文将详细介绍如何使用Markdown创建文档内部跳转(即锚…...
Docker安装pypiserver私服
Docker安装pypiserver私服 1 简介 Python开源包管理工具有pypiserver、devpi和Nexus等,pypiserver安装部署比较简单,性能也不错。 搭建pypiserver私服,可以自己构建镜像,也可以使用官网的docker镜像。 # Github地址 https://g…...
基于微信小程序的居住证申报系统设计与实现(LW+源码+讲解)
专注于大学生项目实战开发,讲解,毕业答疑辅导,欢迎高校老师/同行前辈交流合作✌。 技术范围:SpringBoot、Vue、SSM、HLMT、小程序、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、安卓app、大数据、物联网、机器学习等设计与开发。 主要内容:…...
网站改HTTPS方法
默认的网站建设好后打开的样子那看起来像是钓鱼网站,现在的浏览器特别只能,就是你新买来的电脑默认的浏览器同样也会出现这样“不安全”提示。 传输协议启动了向全球用户安全传输网页内容的流程。然而,随着HTTPS的推出,传输协议通…...
什么是三层交换技术?与二层有什么区别?
什么是三层交换技术?让你的网络飞起来! 一. 什么是三层交换技术?二. 工作原理三. 优点四. 应用场景五. 总结 前言 点个免费的赞和关注,有错误的地方请指出,看个人主页有惊喜。 作者:神的孩子都在歌唱 大家好…...
极客说|利用 Azure AI Agent Service 创建自定义 VS Code Chat participant
作者:卢建晖 - 微软高级云技术布道师 「极客说」 是一档专注 AI 时代开发者分享的专栏,我们邀请来自微软以及技术社区专家,带来最前沿的技术干货与实践经验。在这里,您将看到深度教程、最佳实践和创新解决方案。关注「极客说」&a…...
Rust语言进阶之标准输入: stdin用法实例(一百零五)
简介: CSDN博客专家、《Android系统多媒体进阶实战》一书作者 新书发布:《Android系统多媒体进阶实战》🚀 优质专栏: Audio工程师进阶系列【原创干货持续更新中……】🚀 优质专栏: 多媒体系统工程师系列【…...
力扣刷题思路
提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 前言递归70. 爬楼梯112. 路径总和509. 斐波那契数 分治169. 多数元素240.搜索二维矩阵 II --- 二分查找 单调栈 ---「找最近一个比当前值大/小」的问题739. 每日温度…...
MUX-VLAN实验
一、搭建实验拓扑图 二、基本设备配置 设备接口IP地址子网掩码网关PC1E0/0/110.0.1.1255.255.255.0N/APC2E0/0/110.0.1.2255.255.255.0N/APC3E0/0/110.0.1.3255.255.255.0N/APC4E0/0/110.0.1.4255.255.255.0N/APC5E0/0/110.0.1.6255.255.255.0N/Aserver-1E0/0/110.0.1.5255.2…...
音频进阶学习十二——Z变换
文章目录 前言一、Z变换1.Z变换的作用2.Z变换公式3.Z的状态表示1) r 1 r1 r12) 0 < r < 1 0<r<1 0<r<13) r > 1 r>1 r>1 4.关于Z的解释 二、收敛域1.收敛域的定义2.收敛域的表示方式3.ROC的分析1)当 …...
理解推理型大语言模型
构建和改进推理模型的方法与策略 本文描述了构建推理模型的四种主要方法,以及我们如何增强大型语言模型(LLM)的推理能力。我希望这能为你提供有价值的见解,并帮助你了解这一领域快速发展的文献和热潮。 在2024年,LLM…...
【Brinson 绩效归因模型】
Brinson 绩效归因模型 1、前言2、Brinson模型介绍2.1 归因方式2.1.1 BHB 超额收益分解方案2.1.2 BF 超额收益分解方案 2.2 多期 Brinson 模型 1、前言 如此之多的基金,收益率各有不同,即使同等收益率的基金也各有不同的成因。在这种形势下,广…...
如何轻松将Matlab生成的图表嵌入PowerPoint演示文稿
文章目录 Matlab将生成的图添加PPT中一、Matlab脚本1.添加图片函数2.使用示例 总结 Matlab将生成的图添加PPT中 在许多科学、工程和商业领域,Matlab作为一款强大的数值计算和可视化工具,被广泛应用于数据分析和模型构建。然而,当涉及到分享这…...
组合(力扣77)
从这道题开始,我们正式进入回溯算法的学习。之前在二叉树中只是接触到了一丢丢,而这里我们将使用回溯算法解决很多经典问题。 那么这道题是如何使用回溯算法的呢?在讲回溯之前,先说明一下此题是如何递归的。毕竟回溯递归不分家&a…...
2.7学习
crypto buu-还原大师 仔细阅读题目,这里有一段字符串,但是其中有四个大写字母被替换成了‘?’,那么我们写脚本:首先将四个问号均换成26个大写字母并且组成不同的组合, 所以有四个循环让四个问号都遍历26个…...
[开源/教程]使用Ollama+ESP32实现本地对话助手(可接入deepseek等模型)
[开源/视频教程]使用OllamaESP32实现本地对话助手(可接入deepseek等模型) 简介 使用ollama实现本地模型的定制, 可以做到数据不泄露以及绕开检测的效果, 之后使用嘉立创的esp32开发板实现简单的对话助手 同时接入本文档, 可以直接使用AI对话的方式进行文档处理 XuSenfeng/ai…...
Swagger2 自定义排序
分享一下SpringSwagger2在线文档自定义排序的代码。 这里参考swagger2 接口排序_swagger接口排序-CSDN博客提供的思路,并在此基础上做了优化。 1、引用pom信息 <!--swagger依赖(pojo注解)--><dependency><groupId>io.swagger</groupId>&l…...
sentinel的限流原理
Sentinel 的限流原理基于 流量统计 和 流量控制策略,通过动态规则对系统资源进行保护。其核心设计包括以下几个关键点: 流量统计模型:滑动时间窗口 Sentinel 使用 滑动时间窗口算法 统计单位时间内的请求量,相比传统的固定时间窗…...
Mac 部署Ollama + OpenWebUI完全指南
文章目录 💻 环境说明🛠️ Ollama安装配置1. 安装[Ollama](https://github.com/ollama/ollama)2. 启动Ollama3. 模型存储位置4. 配置 Ollama 🌐 OpenWebUI部署1. 安装Docker2. 部署[OpenWebUI](https://www.openwebui.com/)(可视化…...
C/C++ 面试智能指针
说下你对智能指针的理解 回答1: 因为C使用内存的时候很容易出现野指针、悬空指针、内存泄露的问题。所以C11引入了智能指针来管理内存。有四种: auto_ptr:已经不用了unique_ptr:独占式指针,同一时刻只能有一个指针指向同一个对…...
Halcon缓存?内存泄漏?
目录 1、前言 2、图片缓存 3、全局内存缓存 4、临时内存缓存 5、处理 HALCON 中的疑似内存泄漏 6、其他 1、前言 除⾮必要,否则不建议修改 HALCON 自带的缓存设置。 2、图片缓存 图像通常需要大量内存,而分配大块内存的过程较慢。因此,当释放图像时,HALCON并…...
升级 SpringBoot3 全项目讲解 — 周边店铺展示功能如何实现
学会这款 🔥全新设计的 Java 脚手架 ,从此面试不再怕! 1. 升级 Spring Boot 到 3.x 在升级 Spring Boot 之前,我们需要确保项目的依赖和配置与新版本兼容。以下是升级的主要步骤: 1.1 更新 pom.xml 文件 首先&#…...
Git(分布式版本控制系统)系统学习笔记【并利用腾讯云的CODING和Windows上的Git工具来实操】
Git的概要介绍 1️⃣ Git 是什么? Git 是一个 分布式版本控制系统(DVCS),用于跟踪代码的变更、协作开发和管理项目历史。 由 Linus Torvalds(Linux 之父)在 2005 年开发,主要用于 代码管理。…...
光学和光子学模拟工具在 AR/VR 中的作用
AR/VR 中的光学和光子学 增强现实 (AR) 和虚拟现实 (VR) 站在数字进化的前沿。光学和光子学这一复杂的科学深入研究了光的产生、检测和操控,在这一转变中发挥着至关重要的作用。 图 1 (a) 展示了 AR 系统的设计,强调了光学的关键作用。该图描绘了光的旅…...
大模型产品Deepseek(四)、本地安装部署(Ollama方式)
Ollama与DeepSeek的本地安装与部署教程(Windows/MacOS) 在许多AI应用场景中,您可能希望将智能模型本地化,以便更高效地处理数据并减少对外部云服务的依赖。本文将介绍如何在Windows和macOS上直接安装和配置Ollama,以及如何基于Ollama平台部署DeepSeek模型并进行本地交互。…...
visual studio安装
一、下载Visual Studio 访问Visual Studio官方网站。下载 Visual Studio Tools - 免费安装 Windows、Mac、Linux 在主页上找到并点击“下载 Visual Studio”按钮。 选择适合需求的版本,例如“Visual Studio Community”(免费版本)&#x…...
AI大模型——DeepSeek模型部署实战
摘要 文章主要介绍了DeepSeek大模型的本地部署方法、使用方式以及API接入相关内容。首先指出可通过下载Ollama来部署DeepSeek-R1模型,并给出了模型不同参数版本及存储信息。接着说明了如何通过Chatbox官网下载并接入DeepSeek API,以及如何接入本地部署模…...
音视频的文件封装——AVI、MP4、MKV
3.MKV (Matroska Video File) Matroska (俄语: матроска )是一种多媒体封装格式,可把多种不同编码的影像、不同格式的音频、不同语言的字幕封装到一个文件内。也是一种开放源代码的多媒体封装格式。 Matroska 支持多种文件…...
讯飞绘镜(ai生成视频)技术浅析(五):视频生成
讯飞绘镜(AI生成视频)是一种先进的AI视频生成技术,能够将静态的分镜画面转换为动态视频,并使画面中的元素按照一定的逻辑和动作进行动态展示。 一、讯飞绘镜视频生成技术概述 讯飞绘镜的视频生成技术主要包含以下几个核心模块: 1.视频生成模型:包括生成对抗网络(GAN)…...
【FPGA】 MIPS 12条整数指令 【3】
实现乘除 修改框架 EX:实现带符号乘除法和无符号乘除法 HiLo寄存器:用于存放乘法和除法的运算结果。Hi、Lo为32bit寄存器。电路描述与实现RegFile思想一致 仿真 代码 DataMem.v include "define.v"; module DataMem(input wire clk,input…...