如何在服务停止时执行清理工作?

forwebreg

onClose在stop的时候并不会触发啊

381 2 0
2个回答

forwebreg

现在的设想是这样
在数据库中有一个待办清单
workerman onWorkerStart $worker->id === 0的进程
读取待办清单 send到queue中
所有进程订阅队列进行处理
完成后在数据库中标记完成
当workerman关闭时需要清空队列 否则下次启动 会重复send

现在只能在初始化的时候去清空队列

$redis = new Redis('redis://' . $configs['redis']['host'] . ':' . $configs['redis']['port'], $configs['redis']);
$redis->del(['{redis-queue}-waiting' . QUEUE_NAME, '{redis-queue}-delayed' . QUEUE_NAME, '{redis-queue}-failed' . QUEUE_NAME]);
  • 暂无评论
walkor 打赏

不要用onWorkerStop,因为reload也会触发。
用 $onMasterStop


Worker::$onMasterStop = function () {
    echo "Master stop\n";
};
``
  • 暂无评论
×
🔝