Python 3.x 停止rabitmq进程和队列后的rabbitmq保留请求

Python 3.x 停止rabitmq进程和队列后的rabbitmq保留请求,python-3.x,rabbitmq,task-queue,pika,connexion,Python 3.x,Rabbitmq,Task Queue,Pika,Connexion,我用rabbitmq制作了一个connexion应用程序,它可以正常工作,但当我停止rabbitmq进程时,我的所有请求都会丢失,我希望即使在杀死rabbitmq服务后,我的请求也会被保存,在重新启动rabbitmq服务后,我的所有请求都会返回到它们自己的位置。 这里是我的rabitmq.py: import pika import SimilarURLs data = '' connection = pika.BlockingConnection(pika.ConnectionParam

我用rabbitmq制作了一个connexion应用程序,它可以正常工作,但当我停止rabbitmq进程时,我的所有请求都会丢失,我希望即使在杀死rabbitmq服务后,我的请求也会被保存,在重新启动rabbitmq服务后,我的所有请求都会返回到它们自己的位置。 这里是我的rabitmq.py:

import pika
import SimilarURLs


data = ''

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


def rabit_mq_start(Parametter):
    channel.queue_declare(queue='req')
    a = (take(datas=Parametter.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

此外,很抱歉我的问题中出现了错误。

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

最好使用异步发布器示例作为指南。如果使用
BlockingConnection
确认消息时,您将无法获得异步通知,从而无法实现其目的

如果您需要进一步的帮助后,试图实现这一点自己,我建议跟进邮件列表



注意:RabbitMQ团队监视并有时只回答有关StackOverflow的问题。

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

最好使用异步发布器示例作为指南。如果使用
BlockingConnection
确认消息时,您将无法获得异步通知,从而无法实现其目的

如果您需要进一步的帮助后,试图实现这一点自己,我建议跟进邮件列表



注意:RabbitMQ团队监视并有时只回答有关StackOverflow的问题。

我在RabbitMQ文档中搜索,发现我应该使用
channel.queue\u declare(queue='req',durable=True)
。当我将持久性更改为True时,我的请求存储在磁盘中,因此即使重新启动进程,它仍然可以正常工作。我在rabitmq文档中搜索,发现我应该使用
channel.queue\u declare(queue='req',durable=True)
。当我将持久性更改为True时,我的请求存储在磁盘中,因此即使重新启动进程,它仍然可以正常工作。