/** * 活动队列消息处理 */ 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; } } } } }