api 视图中的 golang 后台工作进程

golang background worker process inside api view

我们正计划从 django 迁移到 golang。

要发送电子邮件或短信,我们在 Django 中用 redis/rabbotmq 做芹菜工人。 但是我们如何在 golang 上完成后台任务。

例如:

def api_view():

 // logic

 // celery tasks- call email/sms service

 // immediate response to client
 return Response()

我们在golang中如何做

fun ApiView(w http.ResponseWriter, req *http.Request){

 //logic

 // need to call email/sms service


 fmt.Fprintf(w, "TEST")
}

有什么我们可以在 gorilla/mux 的 API 视图中开始新的 go 例程(无需额外的 redis/workers)?

谢谢。

是的!正如评论所述,您可以在视图的上下文中生成一个新的 go 例程。 goroutine 获取自己的堆栈并允许它从视图处理函数中操作"asynchronously":

func ApiView(w http.ResponseWriter, req *http.Request){

 //logic

 // need to call email/sms service
 go sendEmail(someEmailAddress)

 fmt.Fprintf(w, "TEST")
}

这将使用 go 例程执行 sendEmail 并立即将 TEST 写入调用者。


虽然微不足道,但并不等同于芹菜redis/rabbitmq:

  • 你如何处理失败?
  • 如何绑定并发(工作池)
  • 你如何缓冲任务? (即目前在 rabbitmq 中,它已停止运行)
  • 如何重试?
  • 异步任务是否应该在不同的 process/memory space 中?

None 以上内容特别困难,但完全可行(并且存在大量 patterns/blogs/libraries 来做这件事)