跳至内容 跳至搜索

Active Job 适配器

Active Job 支持以下排队后端适配器

为了测试和开发,Active Job 内置了三个适配器

后端功能

|                   | Async | Queues | Delayed    | Priorities | Timeout | Retries |
|-------------------|-------|--------|------------|------------|---------|---------|
| Backburner        | Yes   | Yes    | Yes        | Yes        | Job     | Global  |
| Delayed Job       | Yes   | Yes    | Yes        | Job        | Global  | Global  |
| Que               | Yes   | Yes    | Yes        | Job        | No      | Job     |
| queue_classic     | Yes   | Yes    | Yes*       | No         | No      | No      |
| Resque            | Yes   | Yes    | Yes (Gem)  | Queue      | Global  | Yes     |
| Sidekiq           | Yes   | Yes    | Yes        | Queue      | No      | Job     |
| Sneakers          | Yes   | Yes    | No         | Queue      | Queue   | No      |
| Active Job Async  | Yes   | Yes    | Yes        | No         | No      | No      |
| Active Job Inline | No    | Yes    | N/A        | N/A        | N/A     | N/A     |
| Active Job Test   | No    | Yes    | N/A        | N/A        | N/A     | N/A     |

异步

是:排队适配器能够以非阻塞的方式运行作业。它要么在单独的进程或分叉进程中运行,要么在不同的线程中运行。

否:作业在同一个进程中运行。

队列

是:作业可以通过 `queue_as` 或 `set` 方法设置其运行的队列。

延迟

是:适配器将通过 `perform_later` 在将来运行作业。

(Gem):使用此适配器需要额外的 gem 来实现 `perform_later`。

否:适配器将在下一次机会运行作业,无法使用 `perform_later`。

N/A:适配器不支持排队。

注意:从 3.1 版本开始,`queue_classic` 支持作业调度。对于旧版本,您可以使用 `queue_classic-later` gem。

优先级

作业处理的顺序可以根据适配器进行不同的配置。

作业:任何继承自适配器的类都可以设置作业对象的优先级,相对于其他作业而言。

队列:当使用 Active Job 设置队列时,适配器可以为作业队列设置优先级,这将被尊重。

是:允许在作业对象、队列级别或作为默认配置选项设置优先级。

否:适配器不允许配置作业的优先级。

N/A:适配器不支持排队,因此也不支持排序。

超时

作业将在分配的时间后停止运行。

作业:可以为每个作业类实例设置超时时间。

队列:超时时间是为队列上的所有作业设置的。

全局:适配器配置为所有作业都有最长运行时间。

否:适配器不允许配置作业的超时时间。

N/A:此适配器不在单独的进程中运行,因此不支持超时。

重试

作业:可以为每个作业类实例设置重试次数。

是:重试次数可以全局配置,也可以为每个实例或队列配置。此适配器还可以呈现可以重新启动的作业类失败实例。

全局:适配器具有全局重试次数。

否:适配器不允许配置重试次数。

N/A:此适配器不在单独的进程中运行,因此不支持重试。

命名空间
方法
L

类公开方法

lookup(name)

返回指定名称的适配器。

ActiveJob::QueueAdapters.lookup(:sidekiq)
# => ActiveJob::QueueAdapters::SidekiqAdapter
# File activejob/lib/active_job/queue_adapters.rb, line 135
def lookup(name)
  const_get(name.to_s.camelize << ADAPTER)
end