JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 4
  • Score
    100M100P100Q31480F
  • License MIT

Package Exports

  • active-queue/index.d.mts
  • active-queue/index.d.ts
  • active-queue/index.js
  • active-queue/index.js.map
  • active-queue/index.mjs
  • active-queue/index.mjs.map
  • active-queue/schema.d.mts
  • active-queue/schema.d.ts
  • active-queue/schema.js
  • active-queue/schema.js.map
  • active-queue/schema.mjs
  • active-queue/schema.mjs.map

Readme

Active Queue

Simple TypeScript-based task queue inspired by tRPC, Active Job and Sidekiq.

GitHub Tag NPM Downloads GitHub Actions Workflow Status

Setup

1. Start redis & postgresql

2. Adjust your drizzle schema

export * from 'active-queue/schema'

And then

yarn drizzle-kit generate & yarn drizzle-kit migrate

3. Define your jobs

src/queue.config.ts:

export { makeQueue } from 'active-queue'

export const queue = makeQueue({
  namespace: 'test-queue',

  factories: {
    redis: _ => new Redis(),
    pg: _ => new Pool({
      connectionString: process.env.DATABASE_URL!
    }),
    sentry: _ => sentry, // you can also use sentryStub if you don't want this 
  },

  settings: {
    polling_interval: duration(10, 'second'),
    load_window: duration(3, 'seconds'),
    retry: { // or 'disabled'
      step: duration(2, 'seconds'),
      max_attempts: 30
    },
  },

  jobs: {
    async ok() {
      console.warn('* running ok *'.repeat(10))
    },

    async hmmm() {
      console.warn('* running hmmm() *'.repeat(10))      
    }

    /// ...
  }
})

4. Setup & start queue process

src/queue.start.ts:

import { queue } from "./queue.config";

void queue.start()

and

yarn tsx src/queue.start.ts

5. Use your jobs

import { queue } from "@/queue.config";

/// ... 

await queue.later().ok()
/// or 
await queue.in(duration(10, 'minutes')).ok()

// or for direct call without running in other process and for easier debugging
await queue.now().ok()
/// ...