golang背景工人进程里面api视图

时间:2018-04-16 04:51:23

标签: go goroutine

我们计划从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视图中开始新的例程(没有额外的redis / worker)吗?

感谢。

1 个答案:

答案 0 :(得分:0)

是的!正如评论所述,您可以在视图的上下文中生成新的go例程。 goroutine获得自己的堆栈并允许它以异步方式运行#34;来自视图处理功能:

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中它已经过程)
  • 你如何重试?
  • 异步任务应该在不同的进程/内存空间吗?

上述所有内容都不是特别困难,而且完全可行(并且存在大量模式/博客/库来执行此类操作)