记一次生产环境事故

新的项目采用了ASPNETCORE,其中依赖注入使用了AutoFac,通过JSON配置文件实现注入. 在配置生存周期的时候,将部分类型设置为SingleInstance. 其中有个发邮件的类,代码大概是下面的.

Class EmailService{
..
ctor(){
mailMessage = new MailMessage();
}

public void SendAsync(string To,...){
mailMessage.ToList.Add(To);
}
..
}

单例的对象里面的mailMessage.ToList在并发的情况下,在controller注入实例化后下次实例化之前,可能被多次添加收件人, 出现了一些用户收到多封的情况.

一些教训:
1. 不要写和修改自己不理解的代码
2. 代码提示很重要, 用代码配置可能比写配置文件更清晰,避免犯错
3. CodeReview很重要
4. 测试很重要, 要加入UT
5. Log要写, 便于评估影响
6. 多看多学

Leave a Reply

Your email address will not be published.