|
1 | 1 | 错误与重复执行
|
2 | 2 | =========================
|
3 | 3 |
|
4 |
| -在作业处理期间可以抛出异常。 当请求的服务和外部资源不可用时,由于代码编写的比较糟糕而导致的内部错误。 |
5 |
| -在第二种情况下,可以在一段时间后重新尝试这个作业。 |
| 4 | +作业的执行可能会失败。这可能是由于内部错误造成的,这些错误是由编写不当的代码导致的,应该首先修复。但是,它们也可能由于外部问题(例如服务或资源不可用)而失败。这可能会导致异常或超时。 |
| 5 | +在后一种情况下,最好能够在一段时间后重试作业。有几种方法可以做到这一点。 |
6 | 6 |
|
7 |
| -有几种方法可以做到这一点。 |
| 7 | +>注意:下面描述的 ttr 功能需要安装 [PHP Process Control (pcntl)](https://www.php.net/manual/en/book.pcntl.php) 扩展,并且 worker 命令必须使用 --isolate 选项(默认启用)。 |
8 | 8 |
|
9 | 9 | 重试选项
|
10 | 10 | -------------
|
|
21 | 21 | ],
|
22 | 22 | ```
|
23 | 23 |
|
24 |
| - `ttr` 选项设置了在队列中保留工作的时间。如果一份作业在这段时间没有执行,它将返回队列进行重试。 |
| 24 | + `ttr` 选项设置了作业必须成功完成的秒数。因此,可能会发生两件事来使工作失败: |
| 25 | + 1. 作业在`ttr`结束之前发生异常 |
| 26 | + 2. 完成作业所需的时间将比 ttr 长(超时),工作线程停止作业执行 |
| 27 | + |
| 28 | +在这两种情况下,作业都将发送回队列进行重试。但请注意,在第一种情况下,即使作业在运行后立即停止,也不会立即重试,要等到`ttr`"用完"。也就是说,在将作业发送回队列之前,必须经过剩余的 ttr 秒数。 |
| 29 | + |
25 | 30 | `attempts` 选项设置了最大的尝试次数。如果尝试已经结束,作业作还没有完成,它将从队列中移除。
|
26 | 31 |
|
27 | 32 | 这种将全局设置队列中的所有作业,如果您需要为多个作业进行不同的设置可以使用,
|
|
30 | 35 | 重试作业接口
|
31 | 36 | ----------------------
|
32 | 37 |
|
33 |
| -Separate control of retry is implemented by `RetryableJobInterface` 接口。 示例: |
| 38 | +为了更好地控制重试逻辑,作业可以实现 `RetryableJobInterface` 接口。 示例: |
34 | 39 |
|
35 | 40 | ```php
|
36 | 41 | class SomeJob extends BaseObject implements RetryableJobInterface
|
@@ -85,14 +90,14 @@ Yii::$app->queue->on(Queue::EVENT_AFTER_ERROR, function (ExecEvent $event) {
|
85 | 90 | 限制
|
86 | 91 | ------------
|
87 | 92 |
|
88 |
| -完全支持 [Beanstalk], [DB], [File] 和 [Redis] 驱动程序的重试工具。 |
89 |
| -[Sync] 驱动不会重试失败的工作 [Gearman] 不支持重试。 |
90 |
| -[RabbitMQ] 基本版支持,但重试编号无法得到。 |
| 93 | +[Beanstalk], [DB], [File] 和 [Redis] 驱动程序实现了对可重试作业的完全支持。 |
| 94 | +[Sync] 驱动不会重试失败的作业 [Gearman] 不支持重试作业。 |
| 95 | +[RabbitMQ] 只有其基本的可重试支持,其中无法设置尝试次数。 |
91 | 96 |
|
92 | 97 | [Beanstalk]: driver-beanstalk.md
|
93 | 98 | [DB]: driver-db.md
|
94 | 99 | [File]: driver-file.md
|
95 | 100 | [Redis]: driver-redis.md
|
96 | 101 | [Sync]: driver-sync.md
|
97 | 102 | [Gearman]: driver-gearman.md
|
98 |
| -[RabbitMQ]: driver-amqp.md |
| 103 | +[RabbitMQ]: driver-amqp.md |
0 commit comments