MQ限流应用
业务背景:
系统中需要发送邮件给用户!实现是javamail发送
问题:
某天,发现有些用户并未收到邮件
排查:
1,登录发件箱,发现如下图:大量邮件发送失败,大部分是发送频率过高导致邮箱外发功能被限制
3,查看日志发现大量报错:
SMTPSendFailedException 554 too frequently sending
解决办法:
1,查阅了官方文档,如下:
https://help.aliyun.com/knowledge_detail/36642.html
http://www.ali-exmail.cn/help/145.html
官方给出解释和解决办法:
解决办法归类就是两种:一种是降低发送频率,一种是使用邮件推送服务;很显然第二种办法需要多花钱,pass
于是乎解决办法只有一种:降低邮件发送频率
这时就利用MQ的限流功能实现这一功能:
就一个mq配置的关键参数:
prefetch_count
掌握了这个参数就明白了MQ限流如何实现。
参考文章:
https://www.cnblogs.com/throwable/p/13834465.html
花絮:
关于限流的频率,怎么控制;是5秒发送一封还是10s发送一封,可以根据自己的实际情况,影响因素较多,也可以实验出来一个最佳频率,因为这个限制频率官方也没说具体,很复杂的一系列算法,是商业机密。
总之,这个只是一种思路,并不能完全解决这个问题,但是在一定程度上解决短时间发送大量邮件而发送失败的问题。
最终的解决办法,只能使用邮件推送服务了。例如:https://www.aliyun.com/product/directmail
最终:
没过几天,发现大量邮件继续发送失败!
业务快速增长,邮件量太大。每天3000+
只能使用阿里云邮件推送服务了。