作者 邓超

优化同步

@@ -30,16 +30,8 @@ class SyncToEsCmd { @@ -30,16 +30,8 @@ class SyncToEsCmd {
30 $es = (new Lib\Es\Es('hg_ai_emails')); 30 $es = (new Lib\Es\Es('hg_ai_emails'));
31 $db = db(); 31 $db = db();
32 32
33 - $maxNum = 10000; // 最大执行数量  
34 - $minTime = 60; // 最小执行时间 秒  
35 - $maxTime = 1200; // 最大执行时间 秒  
36 - $runTime = time(); // 开始执行时间  
37 - while ($maxNum > 0){  
38 - // 验证最大执行时间  
39 - if(time() - $runTime > $maxTime){  
40 - _echo('超过进程最大执行时间');  
41 - break;  
42 - } 33 +
  34 + while (1){
43 35
44 // 检查是否接收到信号 36 // 检查是否接收到信号
45 pcntl_signal_dispatch(); 37 pcntl_signal_dispatch();
@@ -48,36 +40,27 @@ class SyncToEsCmd { @@ -48,36 +40,27 @@ class SyncToEsCmd {
48 _echo('已退出进程'); 40 _echo('已退出进程');
49 break; 41 break;
50 } 42 }
51 - $maxNum--; 43 +
52 $id = redis()->lPop('sync_to_es'); 44 $id = redis()->lPop('sync_to_es');
53 if($id){ 45 if($id){
54 - $data = $db->first(\Model\listsSql::first('`id` = '.$id)); 46 + $data = $db->throw()->first(\Model\listsSql::first('`id` = '.$id));
55 if($data){ 47 if($data){
56 // 设置 进程 是否在运行 48 // 设置 进程 是否在运行
57 - $data['is_auto']=$db->count('select count(*) from `lists_auto` where `list_id` = '.$data['id']) ? 1 : 0; 49 + $data['is_auto']=$db->throw()->count('select count(*) from `lists_auto` where `list_id` = '.$data['id']) ? 1 : 0;
58 50
59 $data = $this->getEsData($data); 51 $data = $this->getEsData($data);
60 $doc_id = $data['email_id'].'_'.$data['folder_id'].'_'.$data['uid']; 52 $doc_id = $data['email_id'].'_'.$data['folder_id'].'_'.$data['uid'];
61 53
62 $code = $es->save($doc_id,$data); 54 $code = $es->save($doc_id,$data);
63 if($code!==200){ 55 if($code!==200){
64 - sleep(1);  
65 - $code = $es->save($doc_id,$data); // 重试一次  
66 - }  
67 - if($code!==200){ 56 + @file_put_contents(LOG_PATH.'/sync_es_fail.log',$id."\n",FILE_APPEND);
  57 + redis()->rPush('sync_to_es',$id);
68 _echo('同步es: '.$doc_id.'===>'.$code); 58 _echo('同步es: '.$doc_id.'===>'.$code);
69 } 59 }
70 continue; 60 continue;
71 } 61 }
72 } 62 }
73 63
74 -// _echo('没有找到数据');  
75 -  
76 - if(time() - $runTime > $minTime){  
77 - _echo('最小执行时间 退出');  
78 - break;  
79 - }  
80 -  
81 sleep(1); 64 sleep(1);
82 } 65 }
83 66