rabbitmq是如何同步消息的?
How does rabbitmq sync messages?
我使用这个简单的代码 pika
:
conn = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = conn.channel()
def on_message(ch, method, properties, message):
print("Received message: %r" % message)
channel.basic_ack(delivery_tag=method.delivery_tag)
channel.queue_declare(queue='my_queue', durable=True)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(on_message, queue='my_queue')
channel.start_consuming()
问题:
一旦我收到一条消息,并且我的 on_message
回调是 运行ning,在我调用 basic_ack
之前,rabbitmq 如何确保不向其他工作人员发送相同的消息?因为在我的测试中,如果我不调用 basic_ack
如果我多次 运行 代码,消息将再次发送。从发送消息的那一刻起,rabbitmq 是否有一些超时,直到它收到 ack
?
how can rabbitmq make sure not to give the same message to other
worker, until I call basic_ack ?
仅向一个消费者发送消息是 RabbitMQ 的核心功能。消息将保持未确认状态,直到它被传递到的消费者确认它,或者传递它的通道关闭。
in my tests, if I won't call basic_ack the message will be sent again
if I run the code multiple times.
当您多次 运行 您的代码时,会发生以下情况:
- RabbitMQ 将消息传递给您的消费者,将其移至未确认状态。
- 您在未调用
basic_ack
的情况下停止您的消费者应用程序,这会在未确认消息的情况下关闭通道和连接。
- RabbitMQ 检测到这一点并重新排队消息。
- 您重新启动您的消费者,它会重新发送消息。
- 起泡、冲洗、重复。
涵盖了所有这些以及更多内容
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。
我使用这个简单的代码 pika
:
conn = pika.BlockingConnection(pika.ConnectionParameters(host='localhost'))
channel = conn.channel()
def on_message(ch, method, properties, message):
print("Received message: %r" % message)
channel.basic_ack(delivery_tag=method.delivery_tag)
channel.queue_declare(queue='my_queue', durable=True)
channel.basic_qos(prefetch_count=1)
channel.basic_consume(on_message, queue='my_queue')
channel.start_consuming()
问题:
一旦我收到一条消息,并且我的 on_message
回调是 运行ning,在我调用 basic_ack
之前,rabbitmq 如何确保不向其他工作人员发送相同的消息?因为在我的测试中,如果我不调用 basic_ack
如果我多次 运行 代码,消息将再次发送。从发送消息的那一刻起,rabbitmq 是否有一些超时,直到它收到 ack
?
how can rabbitmq make sure not to give the same message to other worker, until I call basic_ack ?
仅向一个消费者发送消息是 RabbitMQ 的核心功能。消息将保持未确认状态,直到它被传递到的消费者确认它,或者传递它的通道关闭。
in my tests, if I won't call basic_ack the message will be sent again if I run the code multiple times.
当您多次 运行 您的代码时,会发生以下情况:
- RabbitMQ 将消息传递给您的消费者,将其移至未确认状态。
- 您在未调用
basic_ack
的情况下停止您的消费者应用程序,这会在未确认消息的情况下关闭通道和连接。 - RabbitMQ 检测到这一点并重新排队消息。
- 您重新启动您的消费者,它会重新发送消息。
- 起泡、冲洗、重复。
注意: RabbitMQ 团队监控 rabbitmq-users
mailing list 并且有时只在 Whosebug 上回答问题。