停止rabbitmq进程和队列后,rabbitmq保持请求
Posted
技术标签:
【中文标题】停止rabbitmq进程和队列后,rabbitmq保持请求【英文标题】:Rabbitmq keep request after stopping rabitmq procces and queue 【发布时间】:2019-05-22 13:07:48 【问题描述】:我用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
另外,很抱歉在我的问题中写错了。
【问题讨论】:
【参考方案1】:您需要启用发布者确认(通过channel
对象上的confirm_delivery
方法)。然后,您的应用程序必须跟踪哪些消息已被确认为已发布,哪些消息尚未发布。您必须自己实施。当 RabbitMQ 停止并重新启动时,您的应用程序可以重新发布未确认的消息。
最好使用异步发布者示例作为指导。如果您使用BlockingConnection
,当消息被确认时,您将不会收到异步通知,从而违背了它们的目的。
如果您在尝试自己实现此功能后需要进一步帮助,我建议您关注pika-python
邮件列表。
注意:RabbitMQ 团队监控the rabbitmq-users
mailing list,并且有时只回答 *** 上的问题。
【讨论】:
我在rabitmq文档中搜索,发现我应该使用channel.queue_declare(queue='req', durable=True)
。当我将持久性更改为 True 时,我的请求存储在我的磁盘中,因此即使重新启动该过程,它仍然可以正常工作。以上是关于停止rabbitmq进程和队列后,rabbitmq保持请求的主要内容,如果未能解决你的问题,请参考以下文章