[英]Can RabbitMQ used in a Python consumer (via pika) have race conditions between concurrently received messages?
假設我們在 Python 中有以下簡單的 RabbitMQ 回調邏輯:
import pika
connection = pika.BlockingConnection(pika.ConnectionParameters('localhost', 5672, '/', pika.PlainCredentials("user", "password")))
channel = connection.channel()
msg_count = 0
def callback(ch, method, properties, body):
global msg_count
msg_count += 1
print("Received %i messages" % msg_count)
channel.basic_consume(queue="my_queue", on_message_callback=callback, auto_ack=True)
如果生產者幾乎同時發送兩條消息,由於競爭條件,“收到 1 條消息”是否可能會打印兩次?
我只是不確定這些回調是如何運行的——它們是同時運行的嗎? 在一個線程? 其他方式?
如果生產者幾乎同時發送兩條消息,由於競爭條件,“收到 1 條消息”是否可能會打印兩次?
不可以。Pika 在內部運行 I/O 循環,事件在准備就緒時按順序進行處理。
FWIW 目前我是主要的 Pika 維護者。
注意: RabbitMQ 團隊會監控rabbitmq-users
郵件列表,並且只是偶爾在 StackOverflow 上回答問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.