通过 http 方式判断 RabbitMQ 队列是否存在

# summary: 通过 http 方式获取 RabbitMQ 队列状态

# import os, sys, time
import requests
import json
from nlp_property import NLP_FRAMEWORK_IP
from urllib import parse


class RabbitMQTool:
    def __init__(self, host, vhost, queue):
        self.host = host
        self.vhost = vhost
        self.queue = queue
        self.user = 'admin'
        self.passwd = 'admin@0'

    def get_queue_status(self):

        vhost = parse.quote_plus(self.vhost)
        queue = parse.quote_plus(self.queue)

        url = 'http://%s:15672/api/queues/%s/%s' % (self.host, vhost, queue)

        # url = url.encode(encoding='utf-8')

        # url = 'http://%s:15672/api/queues' % self.host
        print(url)
        # r = requests.get(url, auth=(self.user, self.passwd))
        r = requests.get(url, auth=(self.user, self.passwd))
        print(r)
        if r.status_code != 200:
            return False
        else:
            return True

        # dic = json.loads(r.text)
        # print(dic)
        #
        # return dic['messages_ready'], dic['messages_unacknowledged'], dic['messages']


if __name__ == '__main__':
    mqTool = RabbitMQTool(host=NLP_FRAMEWORK_IP,
                          vhost="/",
                          queue="nlp.classify.cnn.banktest.request.#")

    status = mqTool.get_queue_status()
    print(status)

RabbitMQ中,我们可以使用Java客户端库(如amqp-client)来操作RabbitMQ,创建、删除、绑定队列等。 要根据队列名称判断是否创建队列,可以通过以下步骤实现: 1. 创建一个连接和通道对象: ``` ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); ``` 2. 判断队列是否存在: ``` String queueName = "myqueue"; boolean isQueueExist = false; try { // 尝试获取队列的属性,如果队列不存在会抛出异常 channel.queueDeclarePassive(queueName); isQueueExist = true; } catch (IOException e) { // 队列不存在 isQueueExist = false; } ``` 上述代码中,通过 `channel.queueDeclarePassive(queueName)` 方法尝试获取队列的属性,如果队列不存在会抛出 `IOException` 异常,我们可以通过捕获该异常来判断队列是否存在。 3. 关闭连接和通道对象: ``` channel.close(); connection.close(); ``` 完整代码示例: ``` import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; import com.rabbitmq.client.ConnectionFactory; import java.io.IOException; public class QueueExistenceCheck { public static void main(String[] args) throws Exception { ConnectionFactory factory = new ConnectionFactory(); factory.setHost("localhost"); Connection connection = factory.newConnection(); Channel channel = connection.createChannel(); String queueName = "myqueue"; boolean isQueueExist = false; try { // 尝试获取队列的属性,如果队列不存在会抛出异常 channel.queueDeclarePassive(queueName); isQueueExist = true; } catch (IOException e) { // 队列不存在 isQueueExist = false; } System.out.println("Queue " + queueName + " is " + (isQueueExist ? "created" : "not created")); channel.close(); connection.close(); } } ``` 注意:这里只是判断队列是否存在,并不会创建队列。如果队列不存在,需要根据需要使用 `channel.queueDeclare()` 方法创建队列
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值