使用了Laravel中的horizon来执行队列任务,任务成功写入并且在控制台可以查看到,但是一直在pending并且没有错误日志。

1. 运行环境

1). 当前使用的 Laravel 版本?

7.0

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.2.5

php-fpm 版本:

3). 当前系统

CentOS 7

4). 业务环境

开发环境。

5). 相关软件版本

nginx,redis,supervisor

2. 问题描述?

启动了horizon来处理队列任务,队列都启动成功。并且通过控制台可以看到任务已经正常写入,但是一直处于pending状态无法执行也没有错误日志。

使用了Laravel中的horizon来执行队列任务,任务成功写入并且在控制台可以查看到,但是一直在pending并且没有错误日志。

使用了Laravel中的horizon来执行队列任务,任务成功写入并且在控制台可以查看到,但是一直在pending并且没有错误日志。

3. 您期望得到的结果?

能够正常执行。
//: <> (能截图就截图。)

4. 您实际得到的结果?

未执行,并且找不到错误信息。
//: <> (有报错信息的话把堆栈信息提供出来)

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
最佳答案

如果使用的是 Redis 集群,请看下这个

Redis 集群

如果你的 Redis 队列当中使用了 Redis 集群,那么你的队列名称就必须包含一个 key hash tag。这是为了确保一个给定队列的所有 Redis 键都被放在同一个哈希插槽:

'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
    // 这里确保队列名称包含一对大括号,比如 {user}.export | {post}.export
    'queue' => '{default}',
    'retry_after' => 90,
],

补充:运行时使用方法设置队列名称同理 ->queue('{import}') ->queue('{export}')

1年前 评论
Xiao_CC (楼主) 1年前
lddtime (作者) 1年前
Xiao_CC (楼主) 1年前
讨论数量: 22

:sob: :sob: 有没有大哥有排查的方案。现在两眼一抹黑,啥信息都没有

1年前 评论

你点击到详情里面看Completed At 是否已经填充时间了

1年前 评论
Xiao_CC (楼主) 1年前

看下是否处于这个状态

file

1年前 评论
Xiao_CC (楼主) 1年前

先确认一下你的job是否被正常执行,检测方法:handler增加日志,或者开启telescope监控一下

1年前 评论
Xiao_CC (楼主) 1年前
springlee (作者) 1年前

如果使用的是 Redis 集群,请看下这个

Redis 集群

如果你的 Redis 队列当中使用了 Redis 集群,那么你的队列名称就必须包含一个 key hash tag。这是为了确保一个给定队列的所有 Redis 键都被放在同一个哈希插槽:

'redis' => [
    'driver' => 'redis',
    'connection' => 'default',
    // 这里确保队列名称包含一对大括号,比如 {user}.export | {post}.export
    'queue' => '{default}',
    'retry_after' => 90,
],

补充:运行时使用方法设置队列名称同理 ->queue('{import}') ->queue('{export}')

1年前 评论
Xiao_CC (楼主) 1年前
lddtime (作者) 1年前
Xiao_CC (楼主) 1年前

请问下有相关文档吗。学习一下

@Xiao_CC

我发的就是官方文档 Redis 集群 的内容,但主要问题还是 Redis 的配置。

文档上已经给出相关链接了 Hash tags,给你截图下示例。

file

file

1年前 评论

你查看下 proc_open 函数是不是禁用了

1年前 评论
Xiao_CC (楼主) 1年前

你是用的集群还是什么 集群的话不支持 单台没问题 参考地址:问答:关于Horizon Redis无法支持集群的问题

1年前 评论
Xiao_CC (楼主) 1年前
raybon (作者) 1年前
Xiao_CC (楼主) 1年前
raybon (作者) 1年前

我也遇到了这个问题,Redis 单机模式下。

任务能正常执行,Horizon 中看到是正常的,但是这 Telescope 中一直都是 pending 状态。并且只有当执行重启命令supervisor reload时,才能看到新增的任务。

并且还有一个现象,telescope 中的我启用了新队列(之前是用的default) TELESCOPE_QUEUE=telescope,但是 Laravel\Telescope\Jobs\ProcessPendingUpdates,即有 default 又有 telescope

    # Laravel 版本
    "laravel/framework": "^10.10",
    "laravel/horizon": "^5.24",
    "laravel/telescope": "^5.0",

    # Redis 版本
   "redis_version" => "3.0.5",
   "redis_mode" => "standalone",

   # PHP
   PHP 8.2.16

file

file

9个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!