pFad - Phone/Frame/Anonymizer/Declutterfier! Saves Data!


--- a PPN by Garber Painting Akron. With Image Size Reduction included!

URL: http://github.com/wavezync/nestjs-pgboss/tree/main

bassets.com/assets/primer-70be7debc79a8eff.css" /> GitHub - wavezync/nestjs-pgboss: State of Art PG Boss integration with NestJS · GitHub
Skip to content

wavezync/nestjs-pgboss

Repository files navigation

@wavezync/nestjs-pgboss

Use pg-boss in your Nest.js app!

Build Status NPM Version License

Features

  • Decorator-based job handling — Use @Job() and @CronJob() decorators to define workers directly on your service methods
  • Cron scheduling — Schedule recurring jobs with cron expressions and timezone support
  • Automatic queue creation — Queues are created automatically before any job operation
  • Parallel processing — Configure teamSize and teamConcurrency for parallel job workers
  • Connection retry logic — Built-in retry with configurable retryLimit and retryDelay for resilient startup
  • Graceful shutdown — PgBoss is automatically stopped when the NestJS application shuts down
  • Full pg-boss access — Access the underlying PgBoss instance directly for advanced use cases

Installation

npm install pg-boss @wavezync/nestjs-pgboss
yarn add pg-boss @wavezync/nestjs-pgboss
pnpm add pg-boss @wavezync/nestjs-pgboss

Usage

Setup

To begin using @wavezync/nestjs-pgboss, initialize the root module:

import { PGBossModule } from "@wavezync/nestjs-pgboss";

// app.module.ts
@Module({
  imports: [
    PgBossModule.forRootAsync({
      imports: [ConfigModule],
      useFactory: async (configService: ConfigService) => ({
        connectionString: configService.get<string>('DATABASE_URL'),
      }),
      inject: [ConfigService],
    }),
  ],
})
export class AppModule {}

Schedule a job using PgBossService

import { Injectable } from '@nestjs/common';
import { PgBossService } from '@wavezync/nestjs-pgboss';

@Injectable()
export class JobSchedulerService {
  constructor(private readonly pgBossService: PgBossService) {}

  async scheduleJob() {
    await this.pgBossService.scheduleJob('my-job', { key: 'value' });
  }
}

Access boss Directly

You can access the PgBoss instance directly via pgBossService.boss

Handle jobs using the @Job decorator

import { Injectable, Logger } from '@nestjs/common';
import { Job } from '@wavezync/nestjs-pgboss';
import { JobWithMetadata } from 'pg-boss';

interface MyJobData {
  id: number;
  name: string;
}

@Injectable()
export class MyJobHandler {
  private readonly logger = new Logger(MyJobHandler.name);

  @Job('my-job')
  async handleMyJob(jobs: JobWithMetadata<MyJobData>[]) {
    this.logger.log(`Processing ${jobs.length} job(s)`);
  }
}

Handle cron jobs using the @CronJob decorator

import { Injectable, Logger } from '@nestjs/common';
import { PgBossService, CronJob } from '@wavezync/nestjs-pgboss';

@Injectable()
export class MyCronJobService {
  private readonly logger = new Logger(MyCronJobService.name);

  @CronJob('my-cron-job', '0 * * * *', { priority: 1 })
  async handleCron() {
    this.logger.log('Executing cron job: my-cron-job');
  }
}

Test

# unit tests
$ npm run test

License

@wavezync/nestjs-pgboss is MIT licensed

Packages

 
 
 

Contributors

pFad - Phonifier reborn

Pfad - The Proxy pFad © 2024 Your Company Name. All rights reserved.





Check this box to remove all script contents from the fetched content.



Check this box to remove all images from the fetched content.


Check this box to remove all CSS styles from the fetched content.


Check this box to keep images inefficiently compressed and original size.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy