首页 > 其他分享 >RabbitMq批量删除队列

RabbitMq批量删除队列

时间:2024-01-23 10:14:07浏览次数:30  
标签:username string 批量 队列 queues RabbitMq vhost var password

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
}

标签:username,string,批量,队列,queues,RabbitMq,vhost,var,password
From: https://www.cnblogs.com/Jackyye/p/17981719

相关文章

  • STL-stack和queue堆栈和队列
    STL-stack和queue堆栈和队列目录STL-stack和queue堆栈和队列堆栈和队列特性堆栈主要操作构造函数主要操作栈顶插入和删除大小相关简单案例队列的主要操作构造函数大小相关索引访问入队/出队优先队列priority_queue初始化构造小顶堆自定义结构体排序参考资料堆栈和队列特性stack......
  • STL-deque双端队列
    STL-deque双端队列目录STL-deque双端队列创建初始化插入元素删除元素遍历容器函数总览deque和vector参考资料deque是double-endedqueue的缩写,又称双端队列容器,可以对其两段的数据进行操作,因为它没有capacity属性,因此不会像vector那样”旧空间不足而重新配置一块更大空间,然后......
  • CF-1399-E2-优先队列
    1399-E2题目大意给定一棵\(n\)个节点的树,边带权,根节点为\(1\)。再给定一个整数\(S\),你可以执行以下操作:选择一条权值为\(w_i\)的边,令\(w_i\rightarrow\lfloor\frac{w_i}{2}\rfloor\)。你可以执行任意次操作,使得\(\sum_{x∈leaves}sum(1,x)\)不大于\(S\),其中\(sum(1,x)\)......
  • 【glibc】glib库队列GQueue介绍
    队列是一种向最后添加条目,从最前删除条目的数据结构,这种数据结构在处理按顺序到达的数据是很有用。glib库提供的队列GQueue是一个双端队列,它的实现基础是双向链表,所以它支持在队列的两端进行添加和删除,也支持很多其它的操作,比如在队列中进行插入和删除,但是我不推荐使用这样的功能......
  • 经典数据结构题目-栈与队列
    栈与队列232.用栈实现队列思路使用两个栈一个栈负责队列的push存元素,将里面的元素pop后放在另外一个栈。此时,另外一个栈最上面的就是最先放入,可用来做队列的pop代码publicMyQueue(){pushSt=newStack<>();popSt=newStack<>();}......
  • 用队列实现栈
      /**@lcapp=leetcode.cnid=225lang=cpp**[225]用队列实现栈*///@lccode=startclassMyStack{public:MyStack(){q1=newqueue<int>;q2=newqueue<int>;}~MyStack(){deleteq1;......
  • 用栈实现队列
      /**@lcapp=leetcode.cnid=232lang=cpp**[232]用栈实现队列*///@lccode=startclassMyQueue{public:MyQueue(){}voidpush(intx){s1.push(x);}intpop(){if(s2.empty()){......
  • RabbitMQ学习八 消费者可靠性
    一、消费者确认机制消费者的可靠性是靠消费者确认机制来保证。RabbitMQ提供了消费者确认机制(consumerAcknowledgement)。当消费者处理消息结束后,应该向RabbitMQ发送一个回执,告知RabbitMQ自己处理状态。回执有三种可选值:ack:成功处理消息,RabbitMQ从队列中删除该消息nack:......
  • oracle导入表批量更新操作
    1、把excel的数据整理成跟数据库存放呼叫相应的样式2、把excel文件另存为*.txt或*.csv文件,最好是*.csv文件,容易对数据做修改3、把转换好的*.txt或*.csv文件上传至数据库中(1)打开工具(tools)菜单-->文本导入器(TextImporter),导入转换好的文件,可以把标题名的复选框去掉4、选择对......
  • P1886 滑动窗口 /【模板】单调队列
    P1886滑动窗口/【模板】单调队列https://www.luogu.com.cn/problem/P1886 思路https://zhuanlan.zhihu.com/p/346354943 Codehttps://www.luogu.com.cn/record/143623041LLn,k;LLa[1000005];deque<LL>maxd,mind;intmain(){cin>>n>>k;......