Laravel的Jobs表中reserved_at与available_at字段有什么区别?
这两个是Laravel队列系统默认jobs表的核心字段,具体区别和用途如下:
available_at
这个字段存储的是任务允许被执行的最早时间戳,规则如下:
- 没有设置延迟的普通任务入队时,该字段值等于任务入队的当前时间,代表入队即可被消费
- 调用
delay()方法设置了延迟执行的任务,该字段值等于「当前时间 + 延迟时长」,队列进程只会拉取available_at≤ 当前时间的任务
reserved_at
这个字段存储的是任务被队列进程预锁定的时间戳,规则如下:
- 任务还没有被任何进程拉取时,该字段值为
null - 当有队列进程匹配到可执行的任务后,会先将该字段更新为当前时间,把任务标记为「已预留」,防止其他进程重复消费同一条任务
- 如果任务顺利执行完成,会直接从
jobs表中删除;如果任务执行失败、或是持有该任务的进程意外崩溃没有上报执行结果,等超出队列配置的retry_after时长后,该预留标记会自动失效,任务会被重新放回队列等待后续重试
内容的提问来源于stack exchange,提问作者Crocodile
相关产品推荐
相关产品推荐

