📅  最后修改于: 2023-12-03 14:46:53.617000             🧑  作者: Mango
当我们使用 RabbitMQ 作为消息队列时,无论是发布者还是消费者,都会有删除消息的需求。本文将介绍如何使用 RabbitMQ 删除消息。
RabbitMQ 允许我们使用以下两种方法删除消息:
当消费者处理完消息后,可以向 RabbitMQ 服务器发送确认信息,告诉服务器该消息已被成功消费。在确认消息的同时,我们可以选择将其从队列中删除。
代码片段:
# 创建连接
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
channel = connection.channel()
# 订阅队列
channel.queue_declare(queue='hello')
# 回调函数,用于处理消息
def callback(ch, method, properties, body):
print("Received %r" % body)
ch.basic_ack(delivery_tag = method.delivery_tag)
# 消费消息
channel.basic_consume(queue='hello', on_message_callback=callback, auto_ack=False)
# 启动消费者
channel.start_consuming()
在 basic_ack
方法中,我们可以将 delivery_tag
参数设置为需要删除的消息的标记。
RabbitMQ 还提供了一组 HTTP API 用于管理服务器和应用程序。我们可以使用其中的删除消息 API 删除消息。
代码片段:
import requests
# 构造 API 地址
api = "http://localhost:15672/api/queues/%2F/myqueue/get"
# 构造请求头
auth = ('guest', 'guest')
headers = {'Content-Type': 'application/json'}
# 发送请求
response = requests.get(api, auth=auth, headers=headers)
# 获取消息标记
delivery_tag = response.json()[0]['delivery_tag']
# 删除消息
api = f"http://localhost:15672/api/queues/%2F/myqueue/ack/{delivery_tag}"
requests.post(api, auth=auth, headers=headers)
以上代码通过 GET 请求获取首条消息,并从响应中获取 delivery_tag
。随后通过 POST 请求将该消息从队列中删除。