Skip to content

HyperdriveJobQueue

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:120

A job queue in a SQL table on D1 or another SQLite, Postgres (Hyperdrive) or MySQL.

With leaseMs, a processing job’s process_at holds its lease’s end, so the table needs no new column. dequeue() settles expired leases and takes the next job with statements that each settle or take a job only once: Postgres skips rows another dequeue() has locked, SQLite runs each statement under its write lock, and MySQL locks the rows it changes, which holds only when the client provides transaction(). Without onLeaseExpired, Postgres does both in one statement; with it, the callbacks run between the two, so they do not shorten the new lease.

A job already processing without a lease, taken by an earlier version or by a queue without leaseMs, cannot be told from one whose lease has expired, so it is due at once.

T

new HyperdriveJobQueue<T>(client, options?): HyperdriveJobQueue<T>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:128

CloudflareSqlClient

HyperdriveJobQueueOptions<T> = {}

HyperdriveJobQueue<T>

cleanupTerminal(options?): Promise<number>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:401

Removes finished jobs: completed and failed ones by default, or those with the given statuses, and with olderThan, only those that finished before it.

JobQueueCleanupOptions | JobStatus[]

Promise<number>

JobQueue.cleanupTerminal


clear(): Promise<void>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:391

Promise<void>

JobQueue.clear


close(): Promise<void>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:442

Promise<void>


complete(jobId, _result?): Promise<void>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:245

string

any

Promise<void>

JobQueue.complete


dequeue(options?): Promise<Job<T> | undefined>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:225

Takes the next due job and, with leaseMs, leases it. Jobs whose lease expired are due again first, or fail when they have no attempts left. Jobs in options.running are left as they are.

JobDequeueOptions = {}

Promise<Job<T> | undefined>

JobQueue.dequeue


enqueue(type, data, options?): Promise<Job<T>>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:159

string

T

{ delay?: number; maxAttempts?: number; metadata?: Record<string, any>; priority?: number; } | undefined

Promise<Job<T>>

JobQueue.enqueue


fail(jobId, error, retry?): Promise<void>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:264

Counts a failed attempt: the job is due again after retry.delayMs when retries are enabled and attempts are left, and fails otherwise. A completed job stays completed, even for a worker whose lease expired.

string

string | Error

JobRetryDirective = ...

Promise<void>

JobQueue.fail


getJob(jobId): Promise<Job<T> | undefined>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:361

string

Promise<Job<T> | undefined>

JobQueue.getJob


init(): Promise<void>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:141

Promise<void>


nextDueAt(): Promise<Date | undefined>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:347

When dequeue() next has work: the earliest due time of a pending job or, with leaseMs, lease expiry of a processing one. A time in the past means dequeue() has work now, even when it only settles an expired lease, so call dequeue() rather than checking size(). undefined when no job is pending or leased.

Promise<Date | undefined>

JobQueue.nextDueAt


peek(): Promise<Job<T> | undefined>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:306

The job dequeue() would take next, including one whose lease expired, shown as it will be once it is due again. Changes nothing.

Promise<Job<T> | undefined>

JobQueue.peek


remove(jobId): Promise<boolean>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:375

string

Promise<boolean>

JobQueue.remove


size(): Promise<number>

Defined in: packages/messaging/src/adapters/cloudflare/hyperdrive-job-queue.ts:326

How many jobs are due now, including those whose lease expired.

Promise<number>

JobQueue.size