@bashleigh/nestjs-amqp
TypeScript icon, indicating that this package has built-in type declarations

0.0.2 • Public • Published

Nestjs AMQP

An amqp connection service for nestjs.

Install

tests

TODO

  • [x] Manage multiple connections
  • [x] Add configuration data
  • [x] Add locallaised config via inject or however nestjs prefers
  • [ ] Close connection on termination
  • [ ] Retry connection on failure
  • [ ] Make documentation in readme easier to follow
  • [ ] Add examples
import {
    Module,
} from '@nestjs/common';
import ConfigModule from '@bashleigh/nest-config';

@module({
    imports: [ConfigModule, AmqpModule.forRoot([
        {
            host: 'amqp://test:test@localhost',
        }, 
        {
            username: 'test',
            password: 'test',
            host: 'localhost',
            port: 5672,
            ssl: true,
            name: 'test',
        }
    ])],
})
export default class TestModule {
}

Alternatively use the env method AMQP_URL=amqp://test@test:localhost:5672

import {
    Injectable,
} from '@nestjs/common';
import {
    InjectAmqpConnection,
} from '@bashleigh/nestjs-amqp';

@Injectable()
export default TestService {
    constructor(
        @InjectAmqpConnection('test') private readonly connectionTest, //gets connection with name 'test' defined in module
        @InjectAmqpConnection(1) private readonly connection1, //gets first defined connection without a name
    ) {}
}

Use InjectAmqpConnection without a parameter for default connection

Future implementation

So far this package manages multiple AMQP connections using the nestjs container and inject them into other providers.
Alternatively I'd like to implement something like this:

import {
    Injectable,
} from '@nestjs/common';
import {
    AmqpConnection,
    Consume,
    Publish,
    Message,
} from '@bashleigh/nestjs-amqp';

@Injectable()
@AmqpConnection()
export default class MyAmqpService {
   
    @Consume("queue_name", {
        noAck: true,
    })
    async listen(@Message message) {
        console.log('Message received', message);
        
        //send a message back
        this.publish();
    }

    @Publish("queue_name")
    async publish() {
        return "Send this to 'queue queue_name'";
    }
}

Then using executable context

import { NestFactory } from '@nestjs/core';
import QueueModule, { MyAmqpService } from './queue';

async function bootstrap() {
  const app = await NestFactory.create(QueueModule);
  const event = app.get(MyAmqpService);

  await event.listen();

}
bootstrap();

process.stdin.resume();

Or something similar to the above is what I'd like to implement

Readme

Keywords

Package Sidebar

Install

npm i @bashleigh/nestjs-amqp

Weekly Downloads

4

Version

0.0.2

License

MIT

Unpacked Size

12.2 kB

Total Files

28

Last publish

Collaborators

  • bashleigh