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+
只能使用阿里云邮件推送服务了。

 

posted @ 2021-04-10 15:20  下午喝什么茶  阅读(383)  评论(0编辑  收藏  举报