We are planning to move to golang from django.
To send an email or sms, we do celery workers with redis/rabbotmq in Django. But how can we do that background tasks on golang.
Eg:
def api_view():
// logic
// celery tasks- call email/sms service
// immediate response to client
return Response()
How can we do in golang
fun ApiView(w http.ResponseWriter, req *http.Request){
//logic
// need to call email/sms service
fmt.Fprintf(w, "TEST")
}
Is there anything we can start new go routine (without additional redis/workers) inside the API view of gorilla/mux ?
Thanks.
Yes! As comments stated you can spawn a new go routine within the context of your view. The goroutine gets its own stack and allows it to operate "asynchronously" from the view handling function:
func ApiView(w http.ResponseWriter, req *http.Request){
//logic
// need to call email/sms service
go sendEmail(someEmailAddress)
fmt.Fprintf(w, "TEST")
}
This will execute sendEmail
using a go routine and immediately write TEST
to the caller.
While trivial it is not equivalent to celery redis/rabbitmq:
None of the above are particularly difficult, and completely doable (and plenty of patterns/blogs/libraries exist for doing this exact thing)