Northern Pileated Marmoset

    @hkube/request-reply

    1.0.1 • Public • Published

    Producer consumer message queue

    producer consumer message queue based on Redis built for Node.js

    Installation

    $ npm install raf-tasq

    Features

    • Sim

    Documentation

    Getting Help

    Basic usage

    Producer
    
    const { producer } = require('raf-tasq');
    const options = {
        job: {
            type: 'test-job',
            data: { action: 'bla' },
        }
    }
    const job = await producer.createJob(options);

    Schema

    The createJob method will validate the options against the schema

    const schema = {
        "properties": {
            "job": {
                "type": "object",
                "properties": {
                    "type": {
                        "type": "string",
                        "required": true,
                        "description": "the job type"
                    },
                    "waitingTimeout": {
                        "type": "integer",
                        "description": "time wait before the job is active/failed/completed"
                    },
                    "resolveOnStart": {
                        "type": "boolean",
                        "description": "should resolve when the job is in active state"
                    },
                    "resolveOnComplete": {
                        "type": "boolean",
                        "description": "should resolve when the job is in completed state"
                    }
                }
            },
            "queue": {
                "type": "object",
                "properties": {
                    "priority": {
                        "type": "integer",
                        "description": "ranges from 1 (highest) to MAX_INT"
                    },
                    "delay": {
                        "type": "integer",
                        "description": "miliseconds to wait until this job can be processed."
                    },
                    "timeout": {
                        "type": "integer",
                        "description": "milliseconds after which the job should be fail with a timeout error"
                    },
                    "attempts": {
                        "type": "integer",
                        "description": "total number of attempts to try the job until it completes"
                    },
                    "removeOnComplete": {
                        "type": "boolean",
                        "description": "If true, removes the job when it successfully completes",
                        "default": false
                    },
                    "removeOnFail": {
                        "type": "boolean",
                        "description": "If true, removes the job when it fails after all attempts",
                        "default": false
                    }
                }
            },
            "setting": {
                "type": "object",
                "properties": {
                    "prefix": {
                        "type": "string",
                        "default": "queue",
                        "description": "prefix for all queue keys"
                    }
                }
            }
        }
    }

    Events

    const { producer } = require('raf-tasq');
    producer.on('job-failed', (jobID, err) => {       
    }).on('job-completed', (jobID, result) => {           
    }).on('job-active', (jobID) => {             
    });
    producer.createJob(options);
    
    const options = {
        job: {
            type: 'test-job',
            data: { action: 'bla' },
        }
    }
    const job = await producer.createJob(options);

    Full Detailed Example

    const { producer } = require('raf-tasq');
    const options = {
        job: {
            resolveOnStart: false,
            resolveOnComplete: false,
            type: 'test-job',
            data: { action: 'bla' },
            waitingTimeout: 5000
        },
        queue: {
            priority: 1,
            delay: 1000,
            timeout: 5000,
            attempts: 3,
            removeOnComplete: true,
            removeOnFail: false
        },
        setting: {
            prefix: 'sf-queue',
            createClient: function (type) {
                return new Redis([{ host: '127.0.0.1', port: 6379 }])
            }
        }
    }
    
    const job = await producer.createJob(options);

    Logging

    Feedback Requested

    Credits

    License

    Copyright

    Keywords

    none

    Install

    npm i @hkube/request-reply

    DownloadsWeekly Downloads

    1

    Version

    1.0.1

    License

    ISC

    Last publish

    Collaborators

    • reggev
    • maty21
    • yehiyam
    • nassih
    • hkubeci
    • bahalool