bull-di

Bull queue with DI

Usage no npm install needed!

<script type="module">
  import bullDi from 'https://cdn.skypack.dev/bull-di';
</script>

README

Bull DI

npm version downloads size Coverage Status dependencies Status type license Code style

Installation

npm i bull-di
# or
yarn add bull-di

Example

Root File

import { loadQueues, subscribeGracefulShutdown } from 'bull-di';

loadQueues({
   queues: [TestQueue],
   redisUrl: 'redis://localhost',
   events: true, // true if it`s worker
});
subscribeGracefulShutdown();

Job File

import Bull from 'bull';
import { Queue, QueueInterface } from 'bull-di';

type IInputData = { userId: string };
type IResultData = { completedAt: Date };

@Service()
@Queue('subscription-expire')
class SubscriptionExpireQueue extends QueueInterface<IInputData, IResultData> {
   @Inject(() => EmailService)
   public emailService!: EmailService;

   public async onProcess(job: Bull.Job<IInputData>) {
      await this.emailService.subscriptionExpire(job.data.userId);

      return {
         completedAt: new Date(),
      };
   }
   public async onFailure(err: Error) {
      console.log(err);
   }

   public async onCompleted(job: Bull.Job<IInputData>, res: IResultData) {
      console.log(`Subscription-expire userId:${job.data.userId} at:${res.completedAt}`);
   }
}

export default SubscriptionExpireQueue;

License

MIT