Skip to content

pedidopago/redis-reliable-queue-js

Repository files navigation

redis-reliable-queue

go node-ts

A Node.js module that implements a reliable queue that uses Redis for the backend. It uses the RPOPLPUSH pattern: https://redis.io/commands/rpoplpush#pattern-reliable-queue

References: https://blog.tuleap.org/how-we-replaced-rabbitmq-redis

Installation

# with npm:
npm install @pedidopago/redis-reliable-queue --save

# with yarn:
yarn add @pedidopago/redis-reliable-queue

Usage

import { ReliableQueue, Listener, Message } from '@pedidopago/redis-reliable-queue';
// import { ClientOpts } from 'redis';
// ...
type MyMessagePayload interface {
    order_id : string;
}
// create a queue with exis
const rq = ReliableQueue.newWithRedisOpts<MyMessagePayload>("queuename", 6379,"redis-host.pedidopago.com.br");
// send a message:
await rq.pushMessage("topic", {order_id: "FFABE9"});
// listen for messages:
const listener = await rq.listen("worker-id");
// the worker ID is used to retrieve messages if the service crashes while reading messages.

// to wait until a message is received:
const [message, finalizemsg] = await listener.waitForMessage();
// the message is of type Message<MyMessagePayload> in this case
console.log(message.topic); // string -> "topic"
console.log(message.content); // MyMessagePayload {order_id: "FFABE9"}
await finalizemsg(); // you must run this after you did something with msg successfully
// failing to run "finalizemsg" will persist the message, so it will be received
// again once you instantiate rq.listen("id") after a restart

Test

Setup the ".env" (optional):

#.env
REDIS_HOST=192.168.X.Y
REDIS_PORT=6379
TEST_QUEUE=sometestqueue

Run:

npm run test

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 3

  •  
  •  
  •