跳至主要內容
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?

4563博客

全新的繁體中文 WordPress 網站
  • 首頁
  • Larvel 遇到的问题以及解决方案
未分類
4 7 月 2020

Larvel 遇到的问题以及解决方案

Job has been attempted too many times or run too long 和 大量MaxAttemptsExceededException问题

此种问题的产生主要是因为retry_after和timeout参数设置过短,引起的任务超时影响。

retry_after 参数说明

在config/queue.php配置文件中,laravel为每个队列连接定义一个 retry_after 选项。此选项指定在重试正在处理的任务之前,队列连接应等待多少秒。

timeout 参数说明

queue:work Artisan 命令暴露一个 --timeout 选项。--timeout 选项指定在杀死正在处理作业的子队列 worker 之前,Laravel 队列主进程将等待多长时间。有时,由于各种原因,子队列进程可能会被 “冻结”。 --timeout 选项用来删除超过指定时间限制的冻结进程:

解决方案

1
2
3
4
5
6
7
8
9
10
11
12
# 修改config/queue.php配置文件中retry_after参数值

'redis' => [
'driver' => 'redis',
'connection' => 'default',
'queue' => 'default',
'retry_after' => (60 * 30), // 30 minutes
'block_for' => null,
],

# queue:work 制定timeout时间长度为
php artisan queue:work --timeout=1755

特殊说明

retry_after 值设置为你的任务完成处理所需的最大秒数。
retry_after 配置选项和 --timeout CLI选项是不同的,但它们共同确保不会丢失任务,并且任务只被成功处理一次。
--timeout 值应该总是比 retry_after 配置值至少短几秒。这将确保处理给定任务的 worker 总是在重试作业之前被杀死。如果你的 --timeout 选项比你的 retry_after 配置值长,你的任务可能会被处理两次。

参考文件

  • https://learnku.com/docs/laravel/7.x/queues/7491#a8780c
  • https://stackoverflow.com/questions/53075318/job-has-been-attempted-too-many-times-or-run-too-long

文章導覽

上一篇文章
下一篇文章

AD

其他操作

  • 登入
  • 訂閱網站內容的資訊提供
  • 訂閱留言的資訊提供
  • WordPress.org 台灣繁體中文

51la

4563博客

全新的繁體中文 WordPress 網站
返回頂端
本站採用 WordPress 建置 | 佈景主題採用 GretaThemes 所設計的 Memory
4563博客
  • Hostloc 空間訪問刷分
  • 售賣場
  • 廣告位
  • 賣站?
在這裡新增小工具