Skip to main content
Logo for Custom Queue Runtime

Custom Queue Runtime

Creating a custom queue runtime in Pikku involves implementing two classes: QueueService for job publishing and QueueWorkers for job processing. Here's how to build one using pg-boss as an example.

Implementation Pattern​

1. Create Your QueueService Implementation​

Handle job publishing and retrieval:

PgBossQueueService
loading...

2. Create Your QueueWorkers Implementation​

Handle job processing and worker lifecycle:

PgBossQueueWorkers
loading...

3. Create Mapping Utilities​

Convert between Pikku types and your queue library:

pg-boss Utils
loading...

Key Implementation Requirements​

Job Execution​

All queue implementations must call runQueueJob() to execute jobs:

import { runQueueJob } from '@pikku/core/queue'

// In your worker processor
const result = await runQueueJob({
queueName: 'my-queue',
data: jobData,
singletonServices,
createSessionServices
})

Worker Registration​

Use the registration helper to validate and register workers:

Queue Registration Helper
loading...

Configuration Mapping​

Define supported and unsupported configurations:

const configMappings: QueueConfigMapping = {
supported: {
batchSize: 'teamSize', // Maps to pg-boss teamSize
pollInterval: 'intervalSeconds', // Maps to polling interval
},
unsupported: {
lockDuration: 'Managed internally by pg-boss',
visibilityTimeout: 'Uses PostgreSQL locks instead'
}
}