跳至内容 跳至搜索

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      |
| Sucker Punch      | Yes   | Yes    | Yes        | No         | No      | 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

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

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

队列

是:作业可以使用 queue_as 或使用 set 方法设置它们运行所在的队列。

Delayed

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

(Gem):此适配器需要额外的 gem 才能与 perform_later 一起使用。

否:适配器将在下次机会运行作业,并且不能使用 perform_later。

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

注意:自 3.1 版以来,queue_classic 支持作业调度。对于较旧的版本,可以使用 queue_classic-later gem。

优先级

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

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

队列:适配器可以设置作业队列的优先级,当使用 Active Job 设置队列时,将遵循此优先级。

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

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

N/A:适配器不支持队列,因此也不支持对它们进行排序。

超时

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

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

队列:为队列中的所有作业设置超时。

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

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

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

重试

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

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

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

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

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

命名空间
方法
L

类公共方法

lookup(name)

返回指定名称的适配器。

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