用于清除所有虚拟主机的所有 RabbitMQ 队列的 Powershell 脚本

问题描述 投票:0回答:1

我正在运行测试,用消息填充 RabbitMQ 队列。我有多个虚拟主机,每个主机都有多个包含大量消息的队列。我想要一个 Powershell 脚本,它可以简单地清除所有虚拟主机的所有队列中的所有消息。已经有一个用于 Python 的脚本可以清除单个虚拟主机的所有队列,但我想使用 powershell,并且我想清除所有虚拟主机的所有队列。

我不想删除队列或虚拟主机,我只想清除队列中的所有消息。我正在使用 RabbitMQ 版本 3.12.10。

有人有这样的脚本吗?

windows powershell rabbitmq
1个回答
0
投票

我基于“rabbitmqctl”文档创建了一个 powershell 脚本。 脚本将 仅删除未确认的消息。 该脚本使用 3 个rabbitmqctl

 命令:

  1. rabbitmqctl list_vhosts > vhosts.txt
     它获取所有虚拟主机的列表并将该列表存储到文件中。
  2. rabbitmqctl list_queues -p $vhost > queues.txt
     它获取给定虚拟主机的所有队列的列表,并将队列名称存储到文件中。
  3. rabbitmqctl purge_queue -p $vhost $queueName
     它会清除给定虚拟主机的给定队列。
记住将 RabbitMQ bin 目录添加到环境路径变量

以在 powershell 终端中启用 rabbitmqctl。该脚本会过滤掉一些通用程序输出,因此根据您使用的 RabbitMQ 版本和环境,

您可能需要修改脚本才能适合您。
这是脚本:

rabbitmqctl list_vhosts > vhosts.txt foreach($vhost in Get-Content .\vhosts.txt) { if ($vhost.StartsWith("Listing vhosts") -or $vhost.StartsWith("name")) { # skipping the generic program output continue; } Write-Host "Checking vhost $($vhost) for queues" rabbitmqctl list_queues -p $vhost > queues.txt foreach ($queueLine in Get-Content .\queues.txt) { if ($queueLine.StartsWith("Timeout: ") -or $queueLine.StartsWith("Listing queues") -or $queueLine.StartsWith("name")) { # skipping the generic program output continue; } $split = $queueLine -split "\s+" # splitting string on both space and tab $queueName = $split[0] $messageCount = $split[1] if ($messageCount -eq 0 ) { continue; } rabbitmqctl purge_queue -p $vhost $queueName } } Remove-Item "vhosts.txt" Remove-Item "queues.txt"

	
© www.soinside.com 2019 - 2024. All rights reserved.