Giter Club home page Giter Club logo

amqp's Introduction

AMQP for Nest.js like a boss. ๐Ÿ’ช

amqp

This module implements an AMQP pub/sub + RPC scalable & fault tolerant interface for Nest.js.

Codacy Badge integration documentation

โšก Features

  • Configurable as a module + programatically add connections on the fly.
  • 100% Rxjs based with typings.
  • Supports multiple connections.
  • Auto-magic reconnection. ๐Ÿ™
  • Offline queueing support to handle disconnects.
  • Handles exchange, queue, and routing key bindings for you.
  • Pub/sub + RPC support.
  • Shutdown signal trap for graceful shutdown. ๐Ÿ’ฃ
  • Configurable, verbose, logging facility.
  • Hackable and extensible. ๐Ÿงฐ
  • Demo implementation.

asciicast

๐Ÿ›ด Installation

npm install @nestjs.pro/amqp
import { Module } from '@nestjs/common';
import { AppService } from './AppService';
import { AMQPModule } from '@nestjs.pro/amqp/dist/AMQPModule';
import { AMQPLogLevel } from '@nestjs.pro/amqp/dist/AMQPLogLevel';

@Module({

    imports: [

        AMQPModule.forRoot({

            //
            // no secrets, log what is actually happening under the hood!
            //
            logLevel: AMQPLogLevel.DEBUG,

            //
            // add multiple connections if required..
            //
            connections: [

                {

                    name: 'one',
                    uri: 'amqp://rabbitmq:rabbitmq@localhost:5672',
                    exchange: {

                        name: 'test-1',
                        type: 'topic',
                        options: {

                            durable: true
                            // all other amqplib options supported..

                        }

                    },
                    queues: [

                        {

                            name: '1',
                            routingKey: '111',
                            createBindings: true,
                            options: {

                                durable: false
                                // all other amqplib options supported..

                            }

                        }

                        // add more queues..

                    ]

                }

                // add more connections to your hearts desire..

            ]

        })

    ],

    providers: [ AppService ]

})
export class AppModule {
}

Service Implementation

See app/src/AppService.ts for a complete implementation.

import { Injectable } from '@nestjs/common';
import { AMQPService } from '@nestjs.pro/amqp/dist/AMQPService';
import { AMQPConnectionStatus } from '@nestjs.pro/amqp/dist/AMQPConnectionStatus';

@Injectable()
export class AppService {

    //
    // Inject in to your service(s)..
    //
    public constructor(private readonly amqpService: AMQPService) {

        //
        // Retrieve the connection named "one" and do some magic..
        //
        amqpService.getConnection('one').subscribe(connection => {

            //
            // Now that we're connected, publish a message..
            //
            connection.queue.publishJSON('test-1', 111, { date: new Date(), rand: Math.random() });

            // ..other fancy work happenin here..

            //
            // Optionally remove the exchange, queue, and routing keys if you want..
            //
            amqpService.tearDown().subscribe(() => {

                console.log('DEMO: Tear down complete, all remaining exchange(s) and queue(s) removed! ๐Ÿ');

                //
                // Disconnect gracefully now that we've cleaned things up..
                //
                amqpService.disconnect();

            });

        });

    }

}

๐Ÿ‘ Contributing/Hacking

Pull down this repo and install the dependencies using pnpm:

If you do not have pnpm installed simply run the following: npm install -g pnpm

Next we can compile the library out to the dist directory:

npx tsc -w

Finally, we just need to start the demo implementation:

npm run start:dev

git clone https://github.com/mateothegreat/nestjspro-amqp
cd nestjspro-amqp

pnpm install

Enjoy!

โ” Help

                    __    _                       
   ____  ___  _____/ /_  (_)____  ____  _________ 
  / __ \/ _ \/ ___/ __/ / / ___/ / __ \/ ___/ __ \
 / / / /  __(__  ) /_  / (__  ) / /_/ / /  / /_/ /
/_/ /_/\___/____/\__/_/ /____(_) .___/_/   \____/ 
                   /___/      /_/                 

https://github.com/nestjspro

amqp's People

Contributors

mateothegreat avatar renovate-bot avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.