我正在运行测试,用消息填充 RabbitMQ 队列。我有多个虚拟主机,每个主机都有多个包含大量消息的队列。我想要一个 Powershell 脚本,它可以简单地清除所有虚拟主机的所有队列中的所有消息。已经有一个用于 Python 的脚本可以清除单个虚拟主机的所有队列,但我想使用 powershell,并且我想清除所有虚拟主机的所有队列。
我不想删除队列或虚拟主机,我只想清除队列中的所有消息。我正在使用 RabbitMQ 版本 3.12.10。
有人有这样的脚本吗?
我基于“rabbitmqctl”文档创建了一个 powershell 脚本。 脚本将 仅删除未确认的消息。
该脚本使用 3 个rabbitmqctl
命令:
rabbitmqctl list_vhosts > vhosts.txt
它获取所有虚拟主机的列表并将该列表存储到文件中。
rabbitmqctl list_queues -p $vhost > queues.txt
它获取给定虚拟主机的所有队列的列表,并将队列名称存储到文件中。
rabbitmqctl purge_queue -p $vhost $queueName
它会清除给定虚拟主机的给定队列。
以在 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"