Как читать сообщения очереди RabbitMQ по одному - PullRequest
1 голос
/ 08 мая 2019

У меня есть требование, где мне нужно прочитать сообщения DLQ и сделать соответствующие действия на основе этого.Ранее приведенный ниже фрагмент кода работал нормально до обновления RabbitMQ / Erlang.Теперь он выдает ошибку Bad Request.

import urllib2
import json
import optparse

class http_worker:

    def authentication(self, url, user, pw):
        password_manager = urllib2.HTTPPasswordMgrWithDefaultRealm() 
        password_manager.add_password(None, url, user, pw)

        self.auth = urllib2.HTTPBasicAuthHandler(password_manager) 
        opener = urllib2.build_opener(self.auth) 
        urllib2.install_opener(opener)

    def call_url(self, url, body_raw):
        body = json.dumps(body_raw)
        #
        # urllib2 post since there is body 
        #
        req = urllib2.Request(url, body, {'Content-Type': 'application/json'})
        return urllib2.urlopen(req)

user = "guest"
pwd = "guest"
rabbit_host = "http://localhost:15672"
host_suffix = "/api/queues/%%2F/%s/get" %(rabbit_queue_name)

url = rabbit_host + host_suffix
body_raw = {"count":5000,"requeue":True,"encoding":"auto","truncate":50000}

worker = http_worker()
worker.authentication(url, user, pwd)
res = worker.call_url(url, body_raw)
result = json.loads(res.read())
...

Итак, я попытался изменить это и использовал новые библиотеки Python, такие как urllib.request, urllib.error, urllib.parse и запросы.Но проблема остается.

Это потому, что последняя версия RabbitMQ перестала принимать вызов REST такого рода?Что может быть альтернативой, чтобы прочитать все сообщения одно за другим в Python для выполнения необходимых действий?

заранее спасибо,

1 Ответ

2 голосов
/ 08 мая 2019

Мы ввели здесь критические изменения: https://github.com/rabbitmq/rabbitmq-management/pull/199

Тело сырое это:

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 

пожалуйста, прочитайте здесь для более подробной информации

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...