2014-02-21 34 views
0

我有什麼似乎是我的rabbitMQ實現中的設計問題。rabbitMQ消費者的RPC調用,如何監聽這兩個隊列?

我有一個消費者,聽一個隊列,以執行一項工作,需要實現多個子任務。 完成作業後,我需要向通知隊列發佈消息,說明作業已完成。

我目前的WIP傾向於那位工作人員傾聽他的隊列並向專業工作人員發佈RPC消息。 我希望他能夠在RPC響應之前收聽RPC響應,直到每個人都完成爲止,然後才能發佈回通知隊列。

這個實現中的問題是我需要同時監聽作業隊列(接收傳入作業)和RPC隊列(以便接收來自每個專業工作人員的回覆)。

顯然這不能通過兩個隊列上的consume()方法來實現。

我的設計有缺陷嗎? (我猜是這樣)我怎樣才能以「好設計」的方式實現這一點?

謝謝

+0

我其實想過使用getMessage()方法從作業隊列中拉入消息,並從應答隊列中消耗(),但這真的看起來像一個可憐的黑客。 – user1159791

回答

0

隨着php-amqp PHP擴展它是不可能的。嘗試使用php-amqplib PHP庫代替。

+0

感謝您的提醒,但我們已經使用其他類型的taks的php-amqp擴展來實現rabbitMq,並且我不想讓這兩個庫在同一個應用中運行,或者不得不更改所有工作已經完成了。是否有針對我的問題的「設計」解決方案?除了有效地刪除RPC邏輯? – user1159791

+0

您總是可以使用第二個'consume()'來獲取響應,或者在一個循環中使用'basic.get'(在資源使用方面無效)。 – pinepain

+0

我想到了這一點(請參閱我對該問題的評論),但基本上,因爲我無法停止消耗(),即使沒有更多消息要收聽,我仍會「鎖定」工作人員以偵聽rpc隊列。在所有邪惡中,我選擇了似乎最少的東西,我在兩個隊列上都使用basic.get。我會把它發送給測試臺,看看它是如何發展的。感謝您的建議:) – user1159791

相關問題