One*_*One 5

有 1 个 goroutine 来处理电子邮件并使用渠道与之通信,例如:

var emailch = make(chan *UserInfo) 
//you could make it buffered, that way it will block if requests are coming too fast
//var emailch = make(chan *UserInfo, 1000)

func init() {
    go func() {
        for ui := range emailch {
            send_email(ui.Email)
        }
    }()
}

func Register(rw http.ResponseWriter, req *http.Request) {
    //code
    emailch <- &UserInfo{....}
}
  • @Jacob 是的,但这始终是您的问题,您可以简单地减少队列大小或将其移动到外部排队软件(可能会崩溃)。使用调度程序 goroutine 的可变池将您的邮件异步发送到 SES,这样您就可以控制队列长度和丢失的信息量。 (3认同)