账号密码登录
微信安全登录
微信扫描二维码登录

登录后绑定QQ、微信即可实现信息互通

手机验证码登录
找回密码返回
邮箱找回 手机找回
注册账号返回
其他登录方式
分享
  • 收藏
    X
    laravel 队列延迟分发不生效?
    10
    0
    一. 业务场景在指定时间内更新订单状态,不知道这么玩对不对,希望大佬们指个路1. 运行环境lnmpcenterOs1). 当前使用的 Laravel 版本?Laravel Framework 8.78.12). 当前使用的 php/php-fpm 版本?PHP 版本:7.4.213). 当前系统CentOS 7.64). 业务环境开发环境, 无负载均衡5). 相关软件版本MySQL 5.7.34;Redis 6.2.42. 问题描述?问题:延迟队列不执行,或报超时错误错误日志:App\Jobs\SettlementOrder has been attempted too many times or run too long. The job may have previously timed out.env 配置文件:BROADCAST_DRIVER=logCACHE_DRIVER=fileFILESYSTEM_DRIVER=localQUEUE_CONNECTION=redisQUEUE_DRIVER=redisREDIS_CLIENT=predisSESSION_DRIVER=fileSESSION_LIFETIME=120REDIS_HOST=127.0.0.1REDIS_PASSWORD=nullREDIS_PORT=6379业务代码://分发任务$jobRes = SettlementOrder::dispatch(['id' => 1])->delay(now()->addSeconds(60));任务代码:<?phpnamespace App\Jobs;....class SettlementOrder implements ShouldQueue{ use Dispatchable, InteractsWithQueue, Queueable, SerializesModels; public $data; public function __construct($data) { $this->data = $data; } public function handle() { /** * 通过交易订单ID,查询订单信息 */ $findOrder = DB::table('trading_record')->where('id', '=', $this->data['id'])->first(); $oldInfo = DB::table('members')->where('id', '=', $findOrder->member_id)->first(); if ($findOrder->status === 2 && $findOrder->result === 1) { $WinTotalFee = 1;//业务逻辑计算 $winMoney = 1;// $up = self::updateTrading($this->data['id'], 1); if ($up) { $income = DB::table('members')->where('id', '=', $findOrder->member_id)->increment('balance', $winMoney); if ($income) { self::balanceBack($findOrder->member_id, $findOrder->total_fee, $oldInfo->balance); self::incomeFunc($findOrder->member_id, $WinTotalFee, $oldInfo->balance); return true; } } return false; } if ($findOrder->status === 2 && $findOrder->result === 2) { $loseTotalFee = bcmul($findOrder->total_fee, bcdiv($findOrder->earnings, 100, 2), 2); $loseMoney = bcsub($findOrder->total_fee, $loseTotalFee, 2); //更新 $up = self::updateTrading($this->data['id'], 2); if ($up) { $rolBack = DB::table('members')->where('id', '=', $findOrder->member_id)->increment('balance', $loseMoney); if ($rolBack) { self::balanceBack($findOrder->member_id, $loseMoney, $oldInfo->balance); self::incomeFunc($findOrder->member_id, $loseTotalFee, $oldInfo->balance, 1); return true; } } return false; } } public static function updateTrading($id, $result) { $up = DB::table('trading_record')->where('id', '=', $id)->update([ 'status' => 1, 'result' => $result, 'updated_at' => date('Y-m-d H:i:s', time()) ]); return $up; } public static function balanceBack($memberId, $totalFee, $balance) { return DB::table('income')->insert([ 'xxx' => xxx ]); } public static function incomeFunc($memberId, $totalFee, $balance, $type = 0) { return DB::table('income')->insert([ 'xxx' => xxx ]); }}尝试过执行的监听代码:php artisan queue:listenphp artisan queue:workphp artisan queue:work redisphp artisan queue:work redis --daemonphp artisan queue:work --daemon3. 您期望得到的结果?能按时执行4. 您实际得到的结果?队列不执行
    0
    打赏
    收藏
    点击回答
        全部回答
    • 0
    更多回答
    扫一扫访问手机版

    回答动态

    师傅被妖怪抓走了:发布了悬赏问题火爆全网的“元宇宙”到底是什么?预计能赚取 1积分收益
    酒后略带风情:发布了悬赏问题Android内存中Graphics与Code占用过高预计能赚取 10积分收益
    扛起拖把扫天下:发布了悬赏问题typescript如何导出接口配置?求解,谢谢!预计能赚取 10积分收益
    发布了悬赏问题Vue 如何改变返回页面的路径?如让B页面只能返回到A页面.预计能赚取 11积分收益
    发布了悬赏问题vue H5移动端;底部bottom固定定位,安卓弹起键盘导致页面变形如何解决?预计能赚取 10积分收益
    发布了悬赏问题请问为什么tomcat8.5 GET请求中文正常,POST请求还需要设置UTF-8.预计能赚取 10积分收益
    发布了悬赏问题vue2.5+ts创建以及引入jq的方法预计能赚取 11积分收益
    情场浪女:发布了悬赏问题import ggplot时报错module 'pandas' has no attribute 'tslib'预计能赚取 10积分收益
    见心书画许老师18753375161:发布了悬赏问题echarts3 legend禁止点击事件,允许悬浮事件预计能赚取 11积分收益
    aa_92cb0bd09f:发布了悬赏问题codewar上的一个问题预计能赚取 11积分收益