@ dirupt/adonis-resque (英语)
叉子为 adonis-resque (英语) 拥有 AdonisJS v7 支持
AdonisJS 重新排队系统,由 节点折叠。 。 。 .
贷项
这个包是叉子 adonis-resque 以 戴洁,更新为 AdonisJS v7 兼容性。 原执行的功劳全部归原作者.
版本数
| @ dirupt/adonis-resque (英语) | @ adonisjs/ 分数 | @adonisjs/ redis (英语) |
|---|---|---|
| ^3. *. * 翻译: | ^7. *. * 翻译: | ^9. *. * 翻译: |
对于 AdonisJS v6 ,使用原始软件包: adonis-resque@^2
安装
pnpm add @dirupt/adonis-resque
安装后调用 configure数字 :
node ace configure @dirupt/adonis-resque
这将:
- 创建
config/resque.ts默认配置 - 注册提供者和命令
adonisrc.ts
使用量
确保 @adonisjs/redis 在使用此软件包之前安装和配置.
创建任务
node ace make:job send_email
这创造了 app/jobs/send_email.ts数字 :
import { BaseJob } from '@dirupt/adonis-resque'
export default class SendEmail extends BaseJob {
async perform(email: string, subject: string) {
// Your job logic here
}
}
排队工作
import SendEmail from '#jobs/send_email'
// Enqueue immediately
await SendEmail.enqueue('[email protected]', 'Welcome!')
// Enqueue with delay (in ms)
await SendEmail.enqueueIn(5000, '[email protected]', 'Reminder')
// Enqueue at specific time (unix timestamp in ms)
await SendEmail.enqueueAt(Date.now() + 60000, '[email protected]', 'Scheduled')
// Batch enqueue
await SendEmail.enqueueAll([
['[email protected]', 'Hello'],
['[email protected]', 'Hello'],
])
时间安排工作(Cron/Interval)
import { BaseJob } from '@dirupt/adonis-resque'
export default class CleanupJob extends BaseJob {
// Run every hour
cron = '0 * * * *'
// Or use interval (e.g., every 5 minutes)
// interval = '5m'
async perform() {
// Cleanup logic
}
}
插件
import { BaseJob, Plugin } from '@dirupt/adonis-resque'
export default class UniqueJob extends BaseJob {
plugins = [
Plugin.jobLock({ lockTimeout: 3600 }),
Plugin.retry({ retryLimit: 3, retryDelay: 1000 }),
]
async perform() {
// Job logic
}
}
可用的插件 :
Plugin.jobLock()- 防止重复运行的工作Plugin.queueLock()- 防止重复的队列任务Plugin.delayQueueLock()- 防止重复的延迟工作Plugin.retry()- 重试失败的工作Plugin.noop()- 日志错误而不丢
开始工作
# Start workers (default)
node ace resque:start
# Start scheduler only
node ace resque:start --schedule
# Use multi-worker
node ace resque:start --isMulti
# Specify queue names
node ace resque:start --queueName=high --queueName=default
配置
单位 config/resque.ts数字 :
import { defineConfig } from '@dirupt/adonis-resque'
const resqueConfig = defineConfig({
redisConnection: 'main',
runWorkerInWebEnv: true,
runScheduler: true,
isMultiWorkerEnabled: true,
multiWorkerOption: {
minTaskProcessors: 1,
maxTaskProcessors: 10,
},
workerOption: {},
queueNameForJobs: 'default',
queueNameForWorkers: '*',
logger: null,
verbose: true,
})
export default resqueConfig
处理错误
覆盖 handleError 在你的工作班级:
export default class MyJob extends BaseJob {
handleError(error: unknown) {
// Custom error handling
console.error('Job failed:', error)
throw error // Re-throw to mark as failed
}
onFailure(failure: ResqueFailure) {
// Called when the job fails after all retries
}
}