我正在解決一個問題,我有一組“熱情的工人”。這意味著它們被維護在內存中,維護自己的上下文并且是可調用的。我一直在研究各種 Go Worker 實現(xiàn),但都依賴于閉包或返回結果的簡單計算函數(shù)。我找到了一個工作人員的示例,它可以讓我啟動上下文并根據(jù)最大隊列和最大例程限制將任務分配給它們: https: //github.com/cahitbeyaz/job-worker/blob/master/main.go #L131然而,這種模式不允許我從上下文返回結果并將其反饋回來。我還使用 Web 服務器,因此 Web 處理程序必須接收結果并做出相應響應。是否有我應該/可以遵循的特定/更好的模式,或者我可以適應工作人員示例的方法?附言。起初我以為我可以創(chuàng)建一個 ResultQueue,其中結果被推回并由 Web 處理程序使用。不過,我認為隊列的順序不可靠。
1 回答

紅顏莎娜
TA貢獻1842條經(jīng)驗 獲得超13個贊
解決方案非常簡單(我確實把它復雜化了)。不確定這實際上有多有效,但懷疑它并不太糟糕。仍然歡迎提出更好模式的建議:
在作業(yè)定義中聲明一個通道來反饋結果:
type Job struct {
Request string
Params []string
Result chan Result
}
在你的工作進程中,而不是僅僅返回返回值,而是通過通道傳遞結果結構:
job.Result <- Result{
Response: result.String(),
Headers: []string{},
}
現(xiàn)在,在 Web 處理程序中,只需等待通道即可:
disatcher.jobQueue <- job
result := <- job.Result
愚蠢的我。不知道為什么要花2個小時的努力。:-p 經(jīng)驗教訓:Go 并發(fā)性非常強大。只是別想太多。
- 1 回答
- 0 關注
- 164 瀏覽
添加回答
舉報
0/150
提交
取消