所有独立的任务都应该在 http 请求 goroutine 之外处理吗?

Should all independent tasks be processed outside the http request goroutine?

由于 golang 在单独的 goroutine 中处理传入的请求,我不清楚哪些类型的任务应该被延迟以由消息队列处理,例如NSQ 消费者,哪些应该在 http 请求 goroutine 中处理。

由于 net/http 包运行每个请求,您无需担心阻塞请求 goroutine。你应该问自己的真正问题是 "Do I need to do this before I return a response to the client, or can it be deferred until later"。通常,如果我需要从数据库中获取数据来提供响应,这将阻止请求 goroutine,那没关系。如果我现在可以 return 响应并在队列中放置一条消息以供稍后处理,那也可以。

由于request goroutine存在的成本很小,并且与其他请求是隔离的,所以你真的不需要那么担心。做对客户有意义的事情。