###### tags: `Ruby on Rails 觀念` # 什麼是 Active Job?用來解決什麼問題? 簡單來說 **Active Job 是用來宣告任務,並把任務放到多種佇列(queue)後台執行的框架**。經典常見的任務可以是平常的系統定時清理、收費方式改變通知、或是定時寄送郵件等任務。任何可以細分的工作與同步執行的事情都可以用 Active Job 來做。 直接舉一個例子,假設我們必發送一封電子郵件給公司1500位職員。每封電子郵件大約需要 1 秒鐘的時間,所以發送總時間將會是 1500 秒,大約 25 分鐘。到底誰會願意等待 25 分鐘才能完成這項工作!? 如果我們使用 Active Job 來處裡,背景作業將與正常的請求流同時並行。我們可以執行其他應用程式也能同時向所有員工發送電子郵件。 ## Active Job 工作圖示  從上圖中我們可以了解,使用 Active Job 可以在進行當前任務時,又執行多個動作,就是靠的佇列(queue),而預設是會把排程放在記憶體裡,但是為了避免伺服器中途掛掉的問題,我們會搭配其他套件來設置佇列的地方,常見的有 Sidekiq 跟 Resque 以及 Delayed Job * Sidekiq 使用高效能的 Redise 來儲存要執行的任務,並且善用多執行序來增加效能,缺點是安裝使用上較麻煩 * Resque 是非同步處理任務的 Gem,另外提供了佇列管理器,可以實現將 Job 插入/取出佇列等功能 * Delayed Job 使用關聯式資料庫,方便安裝使用,但是佇列過多需擔心效能問題 ## 參考 [What is active job and its purpose in ROR?](https://www.educative.io/answers/what-is-active-job-and-its-purpose-in-ror) [RailsGuides](https://rails.ruby.tw/active_job_basics.html) [為你自己學 Ruby on Rails](https://railsbook.tw/chapters/21-background-job)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up