123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657 |
- <?php
- /**
- * User: wangsai
- * Date: 2019/11/5
- * Time: 14:38
- */
- namespace App\Support;
- use App\RedisModel;
- use Cache;
- class EmailQueue
- {
- const KEY = 'tbk_onlive_admin_email_queue_key';
- /**
- * @param $title
- * @param $content
- * @param $emails
- * @param $sender
- */
- public static function rPush($title, $content, $emails, $sender = '')
- {
- // 防止大量错误导致队列堆积
- if (RedisModel::lLen(self::KEY) > 1000) {
- return;
- }
- $emailData = json_encode([$title, $content, (array) $emails, $sender], JSON_UNESCAPED_UNICODE);
- RedisModel::rPush(self::KEY, $emailData);
- }
- public static function send()
- {
- $beginTime = time();
- while (true) {
- $emailData = RedisModel::lPop(self::KEY);
- if (empty($emailData)) {
- break;
- }
- call_user_func_array([Email::class, 'send'], json_decode($emailData, true));
- $now = time();
- // 超过1分钟,主动停止循环
- if ($now - $beginTime > 60) {
- break;
- }
- }
- }
- }
|