RabbitMq批量删除队列
由于部分公司同事使用RabbitMq时,没有将Client设置为autodelete,导致大量冗余队列。其中这些队列又是无routekey队列,收到了批量的订阅消息,占用服务器内存。文章来源:https://www.toymoban.com/news/detail-823771.html
如何将这些无用的队列删除成为一个问题?经过多次摸索,在rabbitmq management api里面找到了方案:文章来源地址https://www.toymoban.com/news/detail-823771.html
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
}
到了这里,关于【mq】RabbitMq批量删除队列的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!