2015-10-26 135 views
0

我正在考慮在我的新應用程序中使用RabbitMQ進行一些異步處理。RabbitMQ PHP消費者數據庫連接

一個我所面臨的挑戰是如何最好地處理數據庫連接。我將使用雄辯和實際PDO。

我在這裏找到的一種資源https://www.teqneers.de/2013/10/simple-spawn-rabbitmq-consumers-with-php/建議使用proc_open產卵一個新進程,但我不太喜歡這種方法,並想知道是否有更好的方法。

我也試圖尋找最佳做法,用於處理在PHP後臺數據庫連接,但沒有發現任何東西。

我曾想過有些事情。

  1. 創建一個新的連接,並關閉它每封郵件

    • 缺點:應用程序即將交付消息羣發郵件和消費者會很多,並且經常運行。可能是資源沉重。
    • 優點:然而,傳統的PHP腳本以類似的方式工作,所以這可能不是一個壞主意
  2. 保持整個消費的生命週期的連接,並經常殺死他們

    • 缺點:顯然是浪費。需要不斷檢查連接是否仍然有效。
  3. 在命令行上運行一個工人

    • 缺點:許多移動部件。需要解析消息ACKS的響應,因此消費者需要等待工作人員結束。意味着創建和關閉每個消息的連接,不如堅持選項1,因爲它具有較少的部分。

我也想過持續連接的,但閱讀更多關於他們後,他們似乎都沒有什麼,我以爲他們是。另外,很多帖子都說這是個壞主意。

我理解PHP可能不是這樣做的最好的工作,但我快速原型和PHP是我最舒服的此任務的語言。

我真的很感激,如果我能得到如何處理這一一些建議。

謝謝。

回答

1

所以我決定去同一個解決方案,是proc_open的合併(實際上並沒有使用proc_open)和選項1和2

使用https://github.com/ricbra/rabbitmq-cli-consumer,這個CLI工具處理消息的實際消費和傳遞它通過命令行(作爲代理)運行到PHP腳本。

PHP腳本每個消息運行一次,並根據退出代碼(0:成功,1:失敗)返回,處理消息ACK。

該腳本像CLI上的普通PHP腳本一樣運行,因此您可以保持對資源處理理智​​的想法。這裏沒有守護進程。

+0

我目前正在努力解決同樣的問題。感謝您分享上述鏈接,似乎是完成此任務的一個不錯的方式。在此期間你有沒有找到更好的建議?還是你堅持這種做法? @frostymarvelous – Tobias

+0

我堅持這一點。我現在主要做點網絡,所以我沒有必要重新訪問。 – frostymarvelous