netcore服务程序暴力退出导致的业务数据不一致的一种解决方案(优雅退出)

 一: 问题提出

  现如今大家写的netcore程序大多部署在linux平台上,而且服务程序里面可能会做各种复杂的操作,涉及到多数据源(mysql,redis,kafka)。成功部署成后台

进程之后,你以为这样就万事大吉了? 却不知当你更新代码时,暴力的kill掉这个进程导致你的业务出现数据不一致,业务流程被破坏等等问题。比如下面这段代码:

 

1. TestService

复制代码
 1     public class TestService  2     {  3         public static void Run()  4         {  5             while (true)  6             {  7                 Console.WriteLine($"{DateTime.Now}: 1. 获取mysql");  8                 System.Threading.Thread.Sleep(2000);  9                 Console.WriteLine($"{DateTime.Now}: 2. 获取redis"); 10                 System.Threading.Thread.Sleep(2000); 11                 Console.WriteLine($"{DateTime.Now}: 3. 更新monogdb"); 12                 System.Threading.Thread.Sleep(2000); 13                 Console.WriteLine($"{DateTime.Now}: 4. 通知kafka"); 14                 System.Threading.Thread.Sleep(2000); 15                 Console.WriteLine($"{DateTime.Now}: 5. 所有业务处理完毕"); 16                 System.Threading.Thread.Sleep(2000); 17             } 18         } 19     }
复制代码

 

2. Main程序

复制代码
1         public static void Main(string[] args) 2         { 3             var bgtask = Task.Run(() => { TestService.Run(); }); 4 5 
                        
关键字:
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信