Ejemplo n.º 1
0
 /**
  * 活动队列消息处理
  */
 public function action_activity_queue()
 {
     $max_running_time = 1800;
     $qs = new QueueService('notice_activity_queue');
     $qsconfig = DbConfig::getDbConfig('queue');
     $qs->connect($qsconfig['host'], $qsconfig['port']);
     if ($qs->connected) {
         $start_t = time();
         $process_id = getmypid();
         while (1) {
             try {
                 $now = date('Y-m-d H:i:s');
                 while ($qs->length()) {
                     try {
                         $info = $qs->lrange(0, 0);
                         //只是读,在成功处理以后才把消息删除。不成功会继续重试
                         model_ActivityUtil::processActMsg($info);
                         $qs->pop();
                     } catch (Exception $ee) {
                         glog::info("[{$now}], msg = [ " . json_encode($info) . " ] exception: " . $ee->getMessage() . "\n" . $ee->getTraceAsString(), "active_error");
                         $subject = "activity_queue_error_" . P_PLATFORM . "_" . date('Y-m-d H:i:s', time());
                         $email_content = "活动发奖队列错误: " . $ee->getMessage() . "\n" . $ee->getTraceAsString() . "\n" . json_encode($info);
                         model_Util::sendemail('*****@*****.**', $subject, $email_content);
                     }
                 }
                 sleep(1);
                 if (time() - $start_t > $max_running_time) {
                     exit(0);
                 }
             } catch (Exception $ex) {
                 glog::info("[{$now}] exception: " . $ex->getMessage() . "\n" . $ex->getTraceAsString(), "active_error");
                 $qs->connect($qsconfig['host'], $qsconfig['port']);
                 if ($qs->connected) {
                     glog::info("[{$now}] re-connected", "active_error");
                 } else {
                     glog::info("[{$now}] connection lost", "active_error");
                     break;
                 }
             }
         }
     }
 }