Rabbitmq 在停止 rabbitmq 进程和队列后保持请求

Rabbitmq keep request after stopping rabitmq procces and queue

我用 rabbitmq 创建了一个连接应用程序,它工作正常但是当我停止 rabbitmq 进程时,我的所有请求都丢失了,我希望即使在终止 rabitmq 服务之后,我的请求也会被保存并在重新启动 rabitmq 服务后,我所有的请求return到自己的位置。

这是我的 rabitmq.py:

import pika
import SimilarURLs


data = ''

connection = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = connection.channel()


def rabit_mq_start(Parameter):
    channel.queue_declare(queue='req')
    a = (take(datas=Parameter.decode()))
    channel.basic_publish(exchange='',
                          routing_key='req',
                          body=str(a))
    print(" [x] Sent {}".format(a))
    return a


channel.start_consuming()


def take(datas):
    returns = SimilarURLs.start(data=datas)
    return returns

另外,很抱歉我的问题写错了。

您需要启用发布者确认(通过 channel 对象上的 confirm_delivery 方法)。然后,您的应用程序必须跟踪哪些消息已被确认为已发布,哪些消息尚未发布。您必须自己实施。当 RabbitMQ 停止并再次启动时,您的应用程序可以重新发布未确认的消息。

最好使用异步发布者示例作为指南。如果您使用 BlockingConnection,您将不会在确认消息时收到异步通知,这违背了它们的目的。

如果您在尝试自己实施后需要进一步的帮助,我建议您关注 pika-python 邮件列表。


注意: RabbitMQ 团队监控 the rabbitmq-users mailing list 并且有时只在 Whosebug 上回答问题。