从我的生产者代码中,我想知道消费者什么时候发布了basic.ack消息。
使用channel.confirm_delivery()和BlockingConnection,文档中不清楚这是否应该确认:( 1)代理接收了消息,或者( 2)确认收到消息的消费者。
运行此代码(没有使用者):
import pika
import uuid
# Open a connection to RabbitMQ on localhost using all default parameters
connection = pika.BlockingConnection()
# Open the channel
我第一次使用Django频道和RabbitMQ pika。我正在尝试从RabbitMQ队列中消费。我正在使用Django通道AsyncConsumer进行分组,将其发送给每个在websocket中连接的人。
User type 1:可以创建一个任务
User type 2:可以接受任务。
用例:当user type 1创建任务时,它会发布在rabbitmq中。当从队列中使用它时,它必须是组--将发送到前端。当user type 2接受任务时,其他user type 2实例不能接受相同的任务,我们再次从队列中消费,并将队列中的下一个任务发送给每个人。
我使用sync_to_async在另一个线程
我试着从pika简介()中理解这个代码示例:
import pika
# Create a global channel variable to hold our channel object in
channel = None
# Step #2
def on_connected(connection):
"""Called when we are fully connected to RabbitMQ"""
# Open a channel
connection.channel(on_channel_open)
根据RabbitMQ关于的文档
当消息被请求时,如果可能的话,它将被放置到其队列中的原始位置。如果没有(由于多个使用者共享队列时来自其他使用者的并发传递和确认),该消息将被请求到更接近队列头的位置。
因此,对于单个客户端使用者,如果服务器队列最初是
尾巴c b a
并且客户端使用者使用头消息("a"),服务器队列应该变成:
尾c b头
然后,如果客户端使用者插入处理过的消息,则应该在服务器队列的首端请求消息(按照文档的“原始位置”),服务器队列应该变成:
尾巴c b a
最后,客户端使用者应该再次使用相同的头消息("a")。
但这
我有一个这样的Flask应用程序
from flask import Flask
from flask_restful import Resource, Api
from mq_handler import MessageBroker
import pika
app = Flask(__name__)
api = Api(app)
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost'))
mb = MessageBroker(connection)
class HelloWo