Skip to content

Queues & jobs

Register QueueServiceProvider and configure config/queue.ts:

typescript
import { env } from '@tyravel/config';

export default {
  default: env('QUEUE_CONNECTION', 'database'),
  connections: {
    database: {
      driver: 'database',
      table: 'jobs',
      connection: 'sqlite',
      retryAfter: 90,
    },
    redis: {
      driver: 'redis',
      connection: 'default',
      queue: 'default',
      retryAfter: 90,
    },
  },
  failed: {
    table: 'failed_jobs',
  },
} as const;

Set QUEUE_CONNECTION=database (or redis) in .env. The sync driver is not registered in QueueManager for production apps — use database or redis, and run tyravel queue:work. Framework tests may use SyncQueue directly when they need inline job execution.

Jobs

typescript
import { Job } from '@tyravel/queue';

export class SendWelcomeEmail extends Job<{ email: string }> {
  override async handle(): Promise<void> {
    // send mail using this.data.email
  }
}

Register job classes on the JobRegistry in AppServiceProvider:

typescript
this.app.make<JobRegistry>('jobs.registry').register(SendWelcomeEmail);

Dispatching

typescript
import { dispatch, Queue } from '@tyravel/core';

await dispatch(new SendWelcomeEmail({ email: '[email protected]' }));
await Queue.connection('database').dispatch(new SendWelcomeEmail({ email: '[email protected]' }));
await Queue.later(60, new SendWelcomeEmail({ email: '[email protected]' }));

Workers

bash
tyravel queue:table
tyravel migrate
tyravel queue:work --connection=database --queue=default

Inspect failed jobs:

bash
tyravel queue:failed-table
tyravel migrate
tyravel queue:failed
tyravel queue:retry 1

Queued listeners in tests

QueuedListener subclasses enqueue CallQueuedListener jobs instead of running inline. In feature tests with QUEUE_CONNECTION=database, drain pending jobs after the HTTP request before asserting side effects (mail, notifications, etc.). See examples/hello-world/tests/support/reference-test-case.ts (drainQueue()).

Released under the MIT License.