【mq】RabbitMq批量删除队列 RabbitMq 批量删除队列 Rabbit 【mq】 Mq mq
RabbitMq批量删除队列
由于部分公司同事使用RabbitMq时,没有将Client设置为autodelete,导致大量冗余队列。其中这些队列又是无routekey队列,收到了批量的订阅消息,占用服务器内存。
如何将这些无用的队列删除成为一个问题?经过多次摸索,在rabbitmq management api里面找到了方案:
using System.Net.Http.Headers;
using System.Text;
using Newtonsoft.Json;
class Program
{
static async Task Main()
{
string rabbitMQBaseUrl = "https://your_url"; // Replace with your RabbitMQ management interface URL
string vhost = ""; // Replace with the vhost you want to remove queues from
string username = ""; // Replace with your RabbitMQ username
string password = ""; // Replace with your RabbitMQ password
// Get a list of queues in the vhost
var queues = await GetQueuesAsync(rabbitMQBaseUrl, vhost, username, password);
// Delete each queue
foreach (var queue in queues)
{
await DeleteQueueAsync(rabbitMQBaseUrl, vhost, username, password, queue);
}
Console.WriteLine("All queues deleted successfully.");
}
static async Task<string[]> GetQueuesAsync(string baseUrl, string vhost, string username, string password)
{
using (var httpClient = new HttpClient())
{
var byteArray = Encoding.ASCII.GetBytes($"{username}:{password}");
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
var response = await httpClient.GetStringAsync($"{baseUrl}/api/queues/{Uri.EscapeDataString(vhost)}");
// Parse the JSON response using Newtonsoft.Json
var queueList = JsonConvert.DeserializeObject<QueueInfo[]>(response);
// Extract queue names from the parsed response
var queueNames = queueList.Select(queueInfo => queueInfo.Name).ToArray();
return queueNames;
}
}
static async Task DeleteQueueAsync(string baseUrl, string vhost, string username, string password, string queue)
{
using (var httpClient = new HttpClient())
{
var byteArray = Encoding.ASCII.GetBytes($"{username}:{password}");
httpClient.DefaultRequestHeaders.Authorization =
new AuthenticationHeaderValue("Basic", Convert.ToBase64String(byteArray));
await httpClient.DeleteAsync(
$"{baseUrl}/api/queues/{Uri.EscapeDataString(vhost)}/{Uri.EscapeDataString(queue)}");
}
}
}
// Define a class to represent the structure of the QueueInfo received from the API
public class QueueInfo
{
public string Name { get; set; }
// Add other properties if needed
}