上一篇『系統設計: 如何取消正在執行的工作任務 (一)』教大家如何用 Go 語言實現 canceler
package 來紀錄及取消正在執行的任務。而本篇來實現上圖的 HTTP Server
及 Worker
程式碼,底下直接用 Gin 框架來快速實現 HTTP 兩個 Handle,分別是 Cancel Task
及 Watch Task
(如下圖標示的 1 跟 2)。
其中上圖綠色框框 1
是用來接收使用者想要取消的任務,而 2
是用來讓 worker 進行長連接,根據不同的情境可以設定不同的等待時間。大家可能會問,為什麼不讓 Server 主動通知 Worker 就可以了,先解釋這點,這邊我們可能要先假設 Worker 存在的環境是封閉的,不能任意架設服務,故需要主動向 HTTP Server 進行詢問。其中 HTTP Server 跟 Worker 中間可以透過 gRPC 或 RESTful 進行資料交換,本篇先以 RESTful 進行說明。