Access denied, Please sign in and make sure you have proper permission.

Ruby SolidQueue 支持防抖式的 Job 么?

qichunren · October 14, 2025 · Last by qichunren replied at October 15, 2025 · 152 hits

我的需求场景是这样的,在后台用户可以添加/编辑某个 Post 记录,在 after_commit 后,需要执行一个比较耗时的基于当前表的所有记录的异步缓存任务 PopulateGlobalPostsCacheJob。如果用户在一条条操作记录,这样会依次创建多任务在执行,而实际上只有最后一个任务是有效的。

我想到的办法就是在模型的 after_commit 中,插入一个在 2 分钟后执行的异步任务。如果这时发现有等待中的任务,就取消之前的这个任务。

要是 SolidQueue 能支持这个用法就好了。

没用过,但是扫了一眼文档

https://github.com/rails/solid_queue?tab=readme-ov-file#concurrency-controls

这里的 on_conflict 似乎能支持这个用法

Reply to coderliu

on_conflict 支持的:discard 参数是将后面的入队的 Job 忽略掉,不是这个使用场景。

on_conflict 支持的:discard 是用在这样的场景:例如 在进行全站数据库备份等比较耗时的操作时,保证只有一个任务在进行,任务正在执行时,后续同样的任务入队了就忽略掉。

You need to Sign in before reply, if you don't have an account, please Sign up first.