Docker

有一個工作隊列有什麼好處?

  • June 10, 2020

我目前正在建構一個向使用者發送交易電子郵件的 API。我用工作隊列來做這件事,尤其是公牛。在開發過程中,我想到了一些事情;這些工作實際在哪裡執行?目前,我通過公牛將這些作業發送到在我電腦上的 docker 容器中執行的 redis 數據庫。我的第一個想法是這些作業在 redis 容器中執行,但我認為這不是真的,因為那個 redis 容器沒有執行 NodeJS,而 NodeJS 正是我用於 API 的。

我想這些作業實際上是在創建它們的同一台機器上執行的。但是,如果是這樣的話,那麼擁有一個工作隊列有什麼好處呢?我認為擁有一個作業隊列的目的是將任務委託給其他東西,這樣 API 就不會因發送所有這些電子郵件而減慢。據我了解,現在發生的一切只是通過向redis發送和接收作業來延遲任務。

我對工作隊列很陌生。我希望我已經足夠清楚地描述了我的情況。

謝謝你。

作業隊列用於記錄工作項。

可以選擇由與應用程序的其餘部分分開的執行緒來處理隊列。這對於利用多個 CPU 在後台進行非同步處理很有用。

同樣有用的是耐用性。如果在應用程序重新啟動後仍需要發送排隊等待發送的電子郵件,則需要儲存。這實際上並不是微不足道的。

即使從應用程序伺服器處理,隊列可能仍然有用。取決於所需的功能。


此實現使用遠端數據庫進行儲存。因此,請隨意編寫一個工作服務(使用公牛)並在單獨的容器中執行它。

  • 主應用程序容器addsa 工作項並繼續前進。
  • 隊列將其拾取,Redis 提供儲存。
  • 工人容器processes 它並做這件事。增加concurrency讓它並行呼叫幾次。

引用自:https://serverfault.com/questions/1020825