2016-11-29 476 views
0

我在這個php庫https://github.com/jakubkulhan/bunny的幫助下使用RabbitMQ,現在我的代碼按以下方式工作:例如,每個隊列都有單獨的類,用於將新消息添加到隊列和單獨的隊列工作者,例如:SmsQueue和SmsWorker。我從cron運行隊列工作者 (例如SmsWorker),問題是我想只在工作不在的情況下運行worker。我認爲RabbitMQ有一些方法可以查看當前是否有活躍的隊列消費者,但我找不到它。這裏有什麼解決方案,我做對了嗎?每個RabbitMQ隊列只有一個消費者

P.S.我剛剛開始使用RabbitMQ,並不太瞭解它,所以很抱歉,如果這是一個愚蠢的問題。

回答

0

我認爲RabbitMQ的有一些方法,如果目前有排隊的活躍消費者,

不是直接的,沒有。

您可能能夠在管理工具的HTTP API中找到一種查詢方式,但我不會那樣做。運行查詢和啓動代碼之間的時間量可能允許創建多個應用程序實例。

相反,我想看看兩個選項:

1)請求隊列獨家訪問,爲消費者(不知道你的庫,但它的AMQP規範的一部分:https://www.rabbitmq.com/amqp-0-9-1-reference.html#basic.consume.exclusive

2)在您的應用程序中使用互斥鎖,以確保您的應用程序僅運行一次

或者,設置您的客戶應用程序,以便您只有一個實例並始終運行。如果您不是動態地啓動新實例,則永遠不會有多個實例。

相關問題