跳至内容 跳至搜索

Active Job adapters

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     |

Async

是:队列适配器能够以非阻塞方式运行任务。它可以在单独的进程或分叉的进程中运行,或者在不同的线程中运行。

否:任务在同一进程中运行。

Queues

是:可以通过 `queue_as` 或使用 `set` 方法设置任务的运行队列。

Delayed

是:适配器将通过 `perform_later` 在未来运行任务。

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

否:适配器将在下一个可用时机运行任务,并且不能使用 `perform_later`。

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

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

Priorities

根据适配器的不同,任务的处理顺序可以有不同的配置方式。

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

Queue:适配器可以设置任务队列的优先级,当使用 Active Job 设置队列时,这将得到尊重。

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

否:适配器不允许配置任务的优先级。

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

Timeout

当任务运行超过预定时间后停止。

Job:可以为任务类的每个实例设置超时时间。

Queue:超时时间为该队列的所有任务设置。

Global:适配器配置为所有任务都有一个最大运行时间。

否:适配器不允许配置任务的超时时间。

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

Retries

Job:可以为任务类的每个实例设置重试次数。

是:重试次数可以全局配置、为每个实例配置或在队列级别配置。此适配器还可能呈现可重新启动的任务类失败实例。

Global:适配器有一个全局的重试次数。

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

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