2.0.0 • Published 4 years ago

@stdjs/queue v2.0.0

Weekly downloads
52
License
MIT
Repository
github
Last release
4 years ago

STDJS - Queue

Downloads Version License Typescript

Queue Adapter with Async/Promise for Javascript(& Typescript).

There are a lot of Queue libraries. Even older libraries may not support Promise. I've gathered most queue libraries into one interface.

Installation

npm install @stdjs/queue --save

Support Queue

  • local
  • aws-sdk (SQS)
    • npm install aws-sdk --save
  • beanstalkd
    • npm install beanstalkd --save
  • amqplib (such as, RabbitMQ)
    • npm install amqplib --save (in typescript npm install @types/amqplib -D)

Support Options

adapterdelaysprioritytimeout
localOX (use mix adapter)O
aws-sdkO (Max 15min)X (use mix adapter)By AWS Console
beanstalkdOOX
amqplibXOX

Interfaces

export interface Connector {
  connect<TPayload>(): Queue<TPayload>
}

export enum Priority {
  Normal = 10,
  High = 30,
  Highest = 50,
}

export interface Queue<P> {
  close(): Promise<void>
  countWaiting(): Promise<number>
  countRunning(): Promise<number>
  flush(): Promise<void>
  send(payload: P, options?: SendQueueOptions): Promise<void>
  receive(): Promise<Job<P> | undefined>
  delete(job: Job<P>): Promise<void>
}

export interface SendQueueOptions {
  delay?: number
  priority?: number
}

export interface Job<P> {
  payload: P
  queue: Queue<P>
  isDeleted: boolean
  done(): Promise<void>
}

Usage

You can create as follows:

(Please refer to the Config section for config.)

const queue = require("@stdjs/queue")
const storage = queue.createQueue(/* Connector */)

// or
import { createQueue } from "@stdjs/queue"
const storage = createQueue(/* Connector */)

Create Local Queue

const connection = createQueue()

Create Aws SQS Queue

import { createQueue } from "@stdjs/queue" 
import { SqsConnector } from '@stdjs/queue/lib/driver/sqs'

const connection = createQueue(new SqsConnector({
  url, // SQS URL, ex. "https://sqs.{region}.amazonaws.com/012345678910/your-sqs-name"
  ...options,
}))

Create RabbitMQ(AMQP) Queue

import { createQueue } from "@stdjs/queue" 
import { AmqpConnector } from '@stdjs/queue/lib/driver/amqp'

const connection = createQueue(new AmqpConnector({
  queue, // AMQP Queue Name, ex. "amqp-queue-name",
  ...options,
}))

Create Beanstalkd Queue

import { createQueue } from "@stdjs/queue" 
import { BeanstalkdConnector } from '@stdjs/queue/lib/driver/beanstalkd'

const connection = createQueue(new BeanstalkdConnector({
  host, // Beanstalkd server host, default "localhost"
  port, // Beanstalkd server port, default 11300
  tube, // Tube name, 
}))

License

MIT