我们有数千个作业正在由Resque处理,但现在有两个特定的作业排队但从未执行。
在activejob日志中,我可以看到它已排队:
[ActiveJob]已排队的SendMarketJob(作业ID:c37 f2098 - 9 f7 b-4 b73-a7 f0-b6 b44 e057535)重新排序(console_high),参数为:#〈GlobalID:0x00007f19f34a1848@uri =#〈URI::GID gid://console/Market/57141〉〉
但之后就消失了。
通常我会看到如下内容:
[ActiveJob] [SendMarketJob]正在执行SendMarketJob(作业ID:c37 f2098 - 9 f7 b-4 b73-a7 f0-b6 b44 e057535),参数为:#〈GlobalID:0x00000000767cd50@uri =#〈URI::GID gid://console/Market/57141〉
[ActiveJob] [SendMarketJob]已执行SendMarketJob(作业ID:c37f2098-9f7b-4b73-a7f0-b6b44e057535)从Resque(console_high)(4878.01ms)
有没有想过这是怎么发生的?
如果再次发生,是否有任何日志记录可以添加以查看为什么会发生?
- Rails版本:5.8.2.1
- 重新配置版本:2.4.0
1条答案
按热度按时间yx2lnoni1#
根据GitHub上的这个问题,这个版本的ActiveJob可以说一个作业实际上没有排队。我认为这是最有可能的情况。
从链接的问题:
修复回调链停止时的ActiveJob日志记录:
问题:
即使作业没有通过适配器入队,ActiveJob也会始终记录“已入队的MyJob(Job ID)...”。执行作业时也会出现同样的问题,即使作业根本没有执行,也会记录“已执行的MyJob(Job ID)...”。如果回调链终止(在_enqueue抛出中止之前)或引发异常,则会发生这种情况。
解决方案:
检查回调链是否中止/是否引发异常,并记录相应的日志。