python-3.x - 停止 rabitmq 进程和队列后,Rabbitmq 保留请求
问题描述
我用rabbitmq创建了一个连接应用程序,它工作正常,但是当我停止rabbitmq进程时,我的所有请求都丢失了,即使在杀死rabitmq服务后,我的请求也会被保存,并且在重新启动rabitmq服务后,我的所有请求都会返回到他们自己的地方。
这是我的 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
另外,我很抱歉在我的问题中写错了。
解决方案
您需要启用发布者确认(通过对象上的confirm_delivery
方法channel
)。然后,您的应用程序必须跟踪哪些消息已被确认为已发布,哪些消息尚未发布。您必须自己实施。当 RabbitMQ 停止并重新启动时,您的应用程序可以重新发布未确认的消息。
最好使用异步发布者示例作为指南。如果您使用BlockingConnection
,则在确认消息时不会收到异步通知,从而违背了它们的目的。
如果您在尝试自己实施后需要进一步的帮助,我建议您跟进pika-python
邮件列表。
注意: RabbitMQ 团队会监控邮件列表,rabbitmq-users
有时只会在 StackOverflow 上回答问题。
推荐阅读
- python - Is there a way to use type hinting on back-compatible code in Python?
- laravel - Laravel Relationship HasManyThrough
- python - Resolving symlinks in Python without failing with missing components (like "readlink -m")
- php - 将 CSV 信息推送到表时,SQL DATE 类型变量为 NULL
- html - padding-right or margin-right for content that exceeds page width (body/viewport)
- python - ZeroRPC 性能。我的基准有什么问题?
- slack-api - 使用 chat.postMessage 的附件问题
- android - 找不到图层“mapbox-location-layer”的来源
- python-3.x - Tkinter 最小化/隐藏终端窗口
- r - different total number of columns in add_header_above from kable