Rabbitmq HTTP-API

使用RabbitMQ的HTTP API获取队列消息内容 通过RabbitMQ的HTTP API,您可以获取队列中的消息内容。在本文中,我们将探讨如何使用RabbitMQ的HTTP API来获取队列消息的内容,并提供相应的源代码示例。通过运行上述代码,您将能够使用RabbitMQ的HTTP API获取队列消息的内容。接下来,我们将使用Python编程语言来演示如何使用RabbitMQ的HTTP API来获取队列消息的内容。希望本文能够帮助您理解如何使用RabbitMQ的HTTP API来获取队列消息的内容,并为您的实际应用场景提供参考。库发送POST请求。 阅读详情

记录

Rabbitmq的pika库实现了对消息队列的完美管理,但是假设我现在有n个服务(consumer),我如何能够看到哪个服务健康的存在呢?我之前的方法是写个监控服务的,每个服务写好后,会定期给监控服务发送个1,表示“我还活着”。如果监控挂了,那就没辙了。当然你可以通过http://ip:15672来查看所有服务的状态,然而不巧的是,这个管理页面不是很好,至少UI不够美观。通过官网,我们可以看到MQ有一套自己的http/api,所以我们就可以自己搞个管理网站了。这里是观察rabbitmq-management的发包请求来写的!!!使用了urllib库。

实现http-api

下面的代码,我都是经过测试的,还没有写全。也算是抛砖引玉吧

import urllib,urllib2
import simplejson
import base64
# 类
class MQManage(object):
    def __init__(self):
        self._conn = None
        self._host = None
        self._username = None
        self._password = None
        self._vhost = '/'
#创建一个连接
    def create_connection(self,host,username,password):
        try:
            self._username = username
            self._password = password
            url = "http://"+host + ":15672/api/whoami"
            self._host = "http://"+host
            userInfo = "%s:%s" % (username, password)
            userInfo = base64.b64encode(userInfo.encode('UTF-8'))
            auth = 'Basic ' + userInfo#必须的
            request = urllib2.Request(url)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', auth)
            response = urllib2.urlopen(request)
            self._conn = auth
        except Exception, e:
            return None
#设置用户权限
    def set_user_vhost(self, vhost='/', configure='.*', write='.*', read='.*'):
        try:
            url = self._host + ':15672/api/permissions/%2F/'
            url += self._username
            body = {}
            body['username'] = self._username
            body['vhost'] = vhost
            body['configure'] = configure
            body['write'] = write
            body['read'] = read
            data = simplejson.dumps(body)
            request = urllib2.Request(url, data)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            request.get_method = lambda: "PUT"
            opener = urllib2.build_opener(urllib2.HTTPHandler)
            response = urllib2.urlopen(request)
            res = response.read()
            return res
        except Exception, e:
            # print str(e)
            return None
#列出所有用户
    def list_users(self):
        try:
            url = self._host + ":15672/api/users"
            request = urllib2.Request(url)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            response = urllib2.urlopen(request)
            return response.read()
        except Exception, e:
            return None
#列出所有队列
    def list_queues(self):
        try:
            url = self._host + ":15672/api/queues"
            request = urllib2.Request(url)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            response = urllib2.urlopen(request)
            return response.read()
        except Exception, e:
            return None
#列出所有交换机
    def list_exchanges(self):
        try:
            url = self._host + ":15672/api/exchanges"
            request = urllib2.Request(url)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            response = urllib2.urlopen(request)
            exchanges = response.read()
            return exchanges
        except Exception, e:
            return None
#列出所有连接
    def list_connections(self):
        try:
            url = self._host + ":15672/api/connections"
            request = urllib2.Request(url)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            response = urllib2.urlopen(request)
            exchanges = response.read()
            return exchanges
        except Exception, e:
            return None
#显示每个连接的详细信息
    def show_connection_detail(self,connection):

        #10.0.0.245%3A44104%20-%3E%2010.0.0.158%3A5672%20(1)
        try:
            con = urllib.quote_plus( connection,safe='(,),' )
            url = self._host + ':15672/api/channels/'+ con
            url = url.replace('+','%20')
            # url = 'http://10.0.0.158:15672/api/connections/10.0.0.245%3A30078%20-%3E%2010.0.0.158%3A5672/channels'
            request = urllib2.Request( url )
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            response = urllib2.urlopen(request)
            detail = response.read()
            return detail
        except Exception, e:
            print str(e)
            return None

    def clear_exchanges(self):
        exchanges = self.list_exchanges()
        for exchange in exchanges:
            self.del_exchange(exchange_name=exchange['name'])

    def clear_queues(self):
        queues = self.list_queues()
        for queue in queues:
            self.del_queue(queue_name=queue['name'])

    def del_exchange(self, exchange_name):
        try:
            url = self._host + ':15672/api/exchanges/%2F/'
            url += exchange_name
            body = {}
            body['vhost'] = self._vhost
            body['name'] = exchange_name
            data = simplejson.dumps(body)
            request = urllib2.Request(url, data)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            request.get_method = lambda: "PUT"
            opener = urllib2.build_opener(urllib2.HTTPHandler)
            response = urllib2.urlopen(request)
            res = response.read()
            return res
        except Exception, e:
            return None

    def del_queue(self, queue_name ):
        try:
            url = self._host + ':15672/api/queues/%2F/'
            url += queue_name
            body = {}
            body['vhost'] = self._vhost
            body['name'] = queue_name
            data = simplejson.dumps(body)
            request = urllib2.Request(url, data)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            request.get_method = lambda: "DELETE"
            opener = urllib2.build_opener(urllib2.HTTPHandler)
            response = urllib2.urlopen(request)
            res = response.read()
            return res
        except Exception, e:
            return None

    def add_vhost(self, vhost_name):
        try:
            url = self._host + ":15672/api/vhosts/"
            url = url + vhost_name
            body = {}
            body['name'] = vhost_name
            data = simplejson.dumps(body)
            request = urllib2.Request(url, data)
            request.add_header('content-type', 'application/json')
            request.add_header('authorization', self._conn)
            request.get_method = lambda: "PUT"
            urllib2.build_opener(urllib2.HTTPHandler)
            response = urllib2.urlopen(request)
            res = response.read()
            return None
        except Exception, e:
            print str(e)
            return None

例如,使用show_connection_detail 后,可以得到类似这样的数据结果
{“connection_details”:{“name”:“10.0.0.245:33728 -> 10.0.0.158:5672”,“peer_port”:33728,“peer_host”:“10.0.0.245”},
“publishes”:[],“deliveries”:[],“consumer_details”:[{“channel_details”:{“name”:“10.0.0.245:33728 -> 10.0.0.158:5672 (1)”,“number”:1,“connection_name”:“10.0.0.245:33728 -> 10.0.0.158:5672”,“peer_port”:33728,“peer_host”:“10.0.0.245”},“queue”:“name”:“standard3”,“vhost”:"/"},“consumer_tag”:“ctag1.ccad2f1905964f1ca6c1d8134ed6e167”,“exclusive”:false,“ack_required”:true,“arguments”:{}}],“idle_since”:“2017-01-19 13:15:25”,“transactional”:false,“confirm”:false,“consumer_count”:1,“messages_unacknowledged”:0,“messages_unconfirmed”:0,“messages_uncommitted”:0,“acks_uncommitted”:0,“prefetch_count”:1,“client_flow_blocked”:false,“node”:“rabbit@ubuntu”,“name”:“10.0.0.245:33728 -> 10.0.0.158:5672 (1)”,“number”:1,“user”:“guest”,“vhost”:"/"}
具体的过程可以自己尝试

使用

mq = MQManage()
mq.create_connection("10.0.0.158",'guest','guest')
queuelist = mq.list_queues()
print queuelist
exchangelist = mq.list_exchanges()
print exchangelist
connections = mq.list_connections()
print connections
details = mq.show_connection_detail("10.0.0.245:33728 -> 10.0.0.158:5672 (1)")
print details

这里只是记录一下,客官也可以观察rabbitmq-management的数据包,自己分析,丰富完善。这种方法比较笨,但是对获取结果的分析,我们就可以观察到每个队列的详细信息,状态,数据包大小等等,不需要通过curl 在Linux下执行一条条命令(个人感觉,在linux下执行http/api请求,是效率最低下的)

RabbitMQ-HTTP API 接口列表 这资料适用于学习,希望对大家的学习有点帮助。 立即下载

相关推荐

STM32G0——USB虚拟串口

STM32G0用cubeMX配置实现USB虚拟串口

阿昌 2320

RabbitMQ的HTTP API

获取所有队列 http://127.0.1.1:15672/api/queues // 1.获取所有队列 // http://server:port/api/queues //http://127.0.1.1:15672/api/queues @RequestMapping("getAllQueues") public Result getAllQueues...

qq_25292419的博客 1841

行人重识别技术(Re-ID)概述、研究现状以及相关数据集下载

ReID技术概述什么是ReID一般流程Re-ID特点研究现状难点数据集reid常用数据集以及下载链接评价指标实现思路研究方式基于表征学习基于度量学习基于局部特征全局特征切片姿态基于视频序列RQEN基于GANCamStyleDG-NetGAN总结对比未来方向建议文献 什么是ReID 行人重识别是指利用计算机视觉技术,判断在不同时间段、不同监控下出现的行人图像是否属于同一人员的技术。行人重识别是最近几年在视频分析领域下热门的研究领域,可以看做是人脸识别应用的拓展。现在大街上的监控较多,由于设备质量、成像光线、.

留缘的博客 1万+

.Net RabbitMQ实战指南——HTTP API接口调用

RabbitMQ Management插件还提供了基于RESTful风格的HTTP API接口来方便调用。一共涉及4种HTTP方法:GET、PUT、DELETE和POST。GET方法一般用来获取如集群、节点、队列、交换器等信息。PUT方法用来创建资源,如交换器、队列之类的。DELETE方法用来删除资源。POST方法也是用来创建资源的,与PUT不同的是,POST创建的是无法用具体名称的资源。比如绑定关系(bindings)和发布消息(publish)无法指定一个具体的名称。 点击Web管理界面左下角的“HT.

weixin_48967543的博客 1791

AI驱动视频剪辑自动化:cutcli命令行工具重塑工作流

视频剪辑自动化是提升内容生产效率的关键技术,其核心原理在于通过程序化指令替代手动操作,将创意执行过程代码化。这项技术的价值在于能够将创作者从重复性劳动中解放,实现批量化、标准化的视频内容生产,尤其适用于社交媒体运营、产品宣传等高频产出场景。通过封装专业软件(如剪映/CapCut)的底层草稿格式,自动化工具在保证工业级渲染质量的同时,提供了可编辑的中间态,为AI智能体(Agent)与生产工具的结合提供了清晰接口。本文以cutcli为例,深入探讨了如何通过命令行工具和AI助手,构建从自然语言指令到可编辑视频草稿

weixin_27210125的博客 1063

高斯投影坐标正反算算法(python)

高斯坐标正反算算法,在正算的时候,y的第一个数字表示是用几度带换算的,第二个数字和第三个数字表示带号。该程序是根据武汉大学出版社出版的第三版的《大地测量学基础》编写, 用于课程实验学习。

weixin_64338372的博客 4588

[原创]RabbitMQ之业务场景(五):采用httpApi动态操作RabbitMQ(JAVA版)

场景是这样的:需要利用RabbitMQ提供的http api,采用java发送http请求来获取到queues相关信息, 并动态删除某些队列。 首先, 我们来看一下RabbitMQ提供http api是什么样子, 大概有哪些api可以使用, 或者符合我们的场景需求? 在浏览器上打开并登陆RabbitMQ后,在页面的最下方我们就可以看到介绍“HTTP API”的链接入口, 下面是api列表, 都...

Java技术干货 2042

合成生物学中试:花钱只是开始,烧钱才是常态

2026年合成生物学行业面临严峻产业化挑战:多家企业终止发酵项目或延期投产,显示从实验室到工厂的转化困境。核心问题并非基因合成成本,而是工艺放大难题——67%项目在中试阶段因工艺问题失败。AI辅助无法替代工程经验,菌株-配方-工艺的三元适配需要长期数据积累。中试成本惊人,涉及设备折旧、原料消耗和稀缺工艺人才,而行业普遍回避讨论这些工程现实,导致认知偏差。建议创业者提前布局中试,将其视为核心竞争力而非简单成本项。合成生物学的真正瓶颈在于工程化能力,这需要时间沉淀而非技术叙事。

AIexander的博客 942

RabbitMQ Management HTTP API

概述 RabbitMQ的所有访问资源都是用application/json类型,并且需要HTTP基本认证。默认的用户名密码是guest/guest。由于虚拟主机名字能够唯一标识对象,所以许多URIS使用虚拟主机的名字作为请求路径的一部分。默认虚拟主机的名字为“/”,这将会被编码为“%2F”。上传的json对象,必须明确指定强制键,并且可能有可选的主键,其他的键将会被忽略。缺少必须的键会导致错误。由于绑定在AMQP中没有名字或者IDs,我们根据它的属性合成一个。由于一般情况下很难预测此名称,所以你可以使用p

平凡 1743

Western blot (WB) 灰度分析进阶指南:ImageJ 高效定量技巧与实战优化

本文详细介绍了使用ImageJ进行Western blot灰度分析的进阶技巧,包括批量处理、背景校正和疑难条带处理等实战优化方法。通过自动化宏脚本和动态背景校正,显著提升分析效率和准确性,特别适合科研人员处理复杂WB数据。

weixin_42557830的博客 899

NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback

NX二次开发-用户自定义资源栏选项卡RegisterActivationCallback

阿飞2018 1385

RabbitMQ通过HTTP API获取队列消息内容

RabbitMQ通过HTTP API获取队列消息内容 背景 为配合公司数据中台建设,我们对公司内部使用的mysql binlog数据分发中间件(现已开源:https://gitee.com/kekingcn/keking-binlog-distributor )进行定制化改造,使其能够同时支持...

chihujiang3132的博客 2451

T527 uart串口配置导致系统进不去

T527 s_uart串口配置导致系统进不去。

Linux驱动开发工程师,熟悉Linux/Android底层驱动、TP、显示、IIC、网络等通用外设调试适配,Linux上层应用开发。常用平台瑞芯微、全志、恩智浦等。 675

RabbitMq的http API调用

最近做项目需要对rabbit消息队列进行有效验证查看了文档发现之后http的api能够验证先对api进行讲解在下面添加调用demo1.获取所有队列http://server:port/api/queues返回json字符串,需要认证 在demo中替换账号密码即可2.获取指定队列信息http://server:port/api/queues/vhost/name刚开始没有注意文档直接使用此路径去调用...

u013488838的专栏 1万+

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

IDEA的使用指南

IDEA基于java的使用手册,可以最快速的上手,在使用中不断的丰富自己的使用技巧.

RabbitMQ通过http API获取队列消息数量等信息

前言 最近在项目运行过程中发现,某些队列消费者宕机,导致消息阻塞,而我们没有及时发现的情况!为解决这种情况,需要我们及时获取队列情况,发现问题及时预警! API RabbitMQ提供了HTTP API手册,发现其中有获取队列情况的API。(本地的API手册地址为:http://localhost:15672/api) 所有API调用都需要做权限验证,需在请求头部中加入权限验证信息,如下 ...

我迷了鹿 5565

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

rabbitmq 持续获取_RabbitMQ 通过 http API 获取队列数

package com.ameya.utils;import com.alibaba.fastjson.JSON;import com.alibaba.fastjson.JSONObject;import org.slf4j.Logger;import org.slf4j.LoggerFactory;import org.springframework.beans.factory.annotati...

weixin_39964833的博客 401

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

rabbitmq 持续获取_RabbitMQ通过HTTP API获取队列消息内容

RabbitMQ通过HTTP API获取队列消息内容背景为配合公司数据中台建设,我们对公司内部使用的mysql binlog数据分发中间件(现已开源:https://gitee.com/kekingcn/keking-binlog-distributor )进行定制化改造,使其能够同时支持redis和rabbitmq两个分发渠道,并能在前端页面监控队列长度、队列消息内容等信息需求由于之前已经完成后...

weixin_42172204的博客 1727

RabbitMQ Management HTTP API的简单封装

RabbitMQ Management HTTP API的简单封装 文章目录RabbitMQ Management HTTP API的简单封装官方相关代码展示 官方相关 **官方文档:**https://rawcdn.githack.com/rabbitmq/rabbitmq-server/v3.10.0/deps/rabbitmq_management/priv/www/api/index.html **支持版本:**v3.10.0 **介绍翻译:**所有URI将仅服务于application/json类

999

rabbitmq 及一般性 http api 调用

http api

qq_52390606的博客 1288

RabbitMQ Management HTTP API 译文

介绍 除了此帮助页面之外,所有URIs都只提供application/json类型的资源,并且需要HTTP基本身份验证(使用标准rabbitMQ用户数据库)。默认用户是guest/guest。 许多URIs需要虚拟主机的名字作为路径的一部分,因为名字只能唯一地标识虚拟主机中的对象。由于默认虚拟主机名为“/”,因此需要将其编码为“%2f”。 PUTing资源然后创建它,你发送的json对象必须...

树洞 3910

RabbitMQ-http api介绍

RabbitMQ 提供的 RESTful 接口,用于无需登录Web控制台即可管理集群、监控状态、操作资源。适合自动化运维、集成监控系统(如Prometheus/Zabbix)或自定义管理工具。

562

RabbitMQ通过http API获取队列数

前提 通过API获取的前提是你的 rabbitmq_management处于开启状态,也就是能通过 http://host:15672 访问web管理端。RabbitMQ的安装与开启rabbitmq_management可以参考RabbitMQ安装、基础。 访问地址 上网找了一下发现没有几个说清楚了怎么直接用HTTP请求去获取队列数。其实完全不用去网上找的,因为RabbitMQ自己就提供了HTTP...

AntChenxi 的博客 1万+

RabbitMQ 通过HTTP API删除队列命令

摘要:本文介绍了两种RabbitMQ队列管理方法。第一种是使用DELETE命令删除单个指定队列,需提供精确的队列名称和认证信息。第二种是通过PUT命令创建自动删除策略,使用正则表达式匹配特定前缀的队列,设置空闲超时后自动删除。两者的主要区别在于操作方式和影响范围:前者立即删除单个队列,后者批量管理符合规则的队列。文章还解析了参数含义、适用场景及常见问题,并提醒注意权限要求和生产环境风险。建议根据实际需求选择合适的方法,测试环境优先验证策略效果。

危险、的博客 657
上一篇: (二)rabbitmq python 踩坑记录
下一篇: 如何在Django后台添加pagedown
猫影
博客等级 码龄10年 31粉丝 72原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值