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 来做这件事)
我们正计划从 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 来做这件事)