chan实现控制速率

MailWorkerChan := make(chan int, workerConfig.Mail)

func SendMailList(L []*model.Mail) {
    for _, mail := range L {
        MailWorkerChan <- 1
        go SendMail(mail)
    }
}

func SendMail(mail *model.Mail) {
    defer func() {
        <-MailWorkerChan
    }()

    url := g.Config().Api.Mail
    r := httplib.Post(url).SetTimeout(5*time.Second, 30*time.Second)
    r.Param("tos", mail.Tos)
    r.Param("subject", mail.Subject)
    r.Param("content", mail.Content)
    resp, err := r.String()
    if err != nil {
        log.Errorf("send mail fail, receiver:%s, subject:%s, cotent:%s, error:%v", mail.Tos, mail.Subject, mail.Content, err)
    }

    log.Debugf("send mail:%v, resp:%v, url:%s", mail, resp, url)
}

该代码节选自open-falconalarm模块中发送邮件的部分,主要通过MailWorkerChan实现控制速率。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Open-falcon是小米运维团队从互联网公司的需求出发,根据多年的运维经验,结合SRE、SA、DEVS的使用经...
    猴子精h阅读 5,201评论 1 5
  • 1、通过CocoaPods安装项目名称项目信息 AFNetworking网络请求组件 FMDB本地数据库组件 SD...
    阳明AI阅读 16,026评论 3 119
  • 两天的绘本讲师培训结束了。收获满满的两天啊,听到了必要的绘本理论知识,和六十个不同人讲的绘本故事,还认识了绘本届的...
    小云_6552阅读 201评论 2 3