Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何逐个读取RabbitMQ队列消息_Python_Rabbitmq - Fatal编程技术网

Python 如何逐个读取RabbitMQ队列消息

Python 如何逐个读取RabbitMQ队列消息,python,rabbitmq,Python,Rabbitmq,我有一个要求,我需要阅读DLQ的信息,并在此基础上采取适当的行动。之前,下面的代码片段在RabbitMQ/Erlang更新之前工作正常。现在它给出了错误的请求错误 导入urllib2 导入json 导入optpass 类http_工作程序: def身份验证(自我、url、用户、pw): 密码\u管理器=urllib2.HTTPPasswordMgrWithDefaultRealm() 密码管理器。添加密码(无、url、用户、pw) self.auth=urllib2.HTTPBasicAuthH

我有一个要求,我需要阅读DLQ的信息,并在此基础上采取适当的行动。之前,下面的代码片段在RabbitMQ/Erlang更新之前工作正常。现在它给出了错误的请求错误

导入urllib2
导入json
导入optpass
类http_工作程序:
def身份验证(自我、url、用户、pw):
密码\u管理器=urllib2.HTTPPasswordMgrWithDefaultRealm()
密码管理器。添加密码(无、url、用户、pw)
self.auth=urllib2.HTTPBasicAuthHandler(密码管理器)
opener=urlib2.build\u opener(self.auth)
urllib2.install_opener(opener)
def调用url(自身、url、主体原始):
body=json.dumps(body\u原始)
#
#urllib2 post,因为存在正文
#
请求(url,正文,{'Content-Type':'application/json'})
返回urllib2.urlopen(req)
user=“guest”
pwd=“来宾”
兔_主机=”http://localhost:15672"
host_suffix=“/api/queues/%%2F/%s/get”%(兔子队列名称)
url=兔\主机+主机\后缀
body_raw={“count”:5000,“requeue”:True,“encoding”:“auto”,“truncate”:50000}
worker=http_worker()
身份验证(url、用户、pwd)
res=worker.call\uURL(url,body\uRAW)
result=json.load(res.read())
...
因此,我尝试改变这一点,并使用了新的Python库,如urllib.request、urllib.error、urllib.parse和requests。但问题依然存在

是因为最新版本的RabbitMQ停止接受这种REST调用吗? 除了在Python中逐个读取所有消息以执行所需操作,还有什么替代方法


提前感谢,

我们在这里引入了一个突破性的变化:

身体是:

body_raw = 
{"count":5000,"ackmode":"ack_requeue_false",
"encoding":"auto","truncate":50000}
有4个选项,而不是布尔值:

ackmode=ack_requeue_false
ackmode=ack_requeue_true
ackmode=reject_requeue_false
ackmode=reject_requeue_true 

请阅读了解更多详细信息

我们在此处引入了突破性的更改:

身体是:

body_raw = 
{"count":5000,"ackmode":"ack_requeue_false",
"encoding":"auto","truncate":50000}
有4个选项,而不是布尔值:

ackmode=ack_requeue_false
ackmode=ack_requeue_true
ackmode=reject_requeue_false
ackmode=reject_requeue_true 

请阅读了解更多详细信息

谢谢您的帮助。它允许获取消息。现在我被困在下一个层次。在收到结果后,我想连接键属性的所有值。在这里,如果我从MSDOS命令提示符运行,它将非常有效,VisualStudio代码。当我从Bash Ubuntu运行相同的程序时,调用print_out方法时会抛出错误。错误是“JSON对象必须是str,而不是‘bytes’”。打印代码块为:
python msg=urllib.request.urlopen(req,requestJsonBytes)打印(JSON.loads(res.read()))def print_out(my_JSON):我的JSON:print中的项的打印(“在循环内并打印当前项:”)out=[]对于val in sorted(item.get(“properties”).get(“headers”).items()):print(str(val))out.append(str(val))print(“,”.join(out))
您确实应该开始一个新问题,并提供有关如何复制的完整详细信息。最后,您不应该使用HTTP API检索消息-为什么不使用Pika之类的库?@LukeBakken同意,我正在创建一个新的问题线程。是的,我试过Pika,但无法一次检索所有邮件。谢谢帮助。它允许获取消息。现在我被困在下一个层次。在收到结果后,我想连接键属性的所有值。在这里,如果我从MSDOS命令提示符运行,它将非常有效,VisualStudio代码。当我从Bash Ubuntu运行相同的程序时,调用print_out方法时会抛出错误。错误是“JSON对象必须是str,而不是‘bytes’”。打印代码块为:
python msg=urllib.request.urlopen(req,requestJsonBytes)打印(JSON.loads(res.read()))def print_out(my_JSON):我的JSON:print中的项的打印(“在循环内并打印当前项:”)out=[]对于val in sorted(item.get(“properties”).get(“headers”).items()):print(str(val))out.append(str(val))print(“,”.join(out))
您确实应该开始一个新问题,并提供有关如何复制的完整详细信息。最后,您不应该使用HTTP API检索消息-为什么不使用Pika之类的库?@LukeBakken同意,我正在创建一个新的问题线程。是的,我试过Pika,但无法一次检索所有消息。