簡體   English   中英

Python 使用者(通過 pika)中使用的 RabbitMQ 能否在同時接收的消息之間存在競爭條件?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM