使用了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. 您实际得到的结果?

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

《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
最佳答案

如果使用的是 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}')

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

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

2年前 评论

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

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

看下是否处于这个状态

file

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

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

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

如果使用的是 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}')

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

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

@Xiao_CC

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

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

file

file

2年前 评论

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

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

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

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

我也遇到了这个问题,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

1年前 评论

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