0.1.30 • Published 5 years ago

decorated-rabbit v0.1.30

Weekly downloads
5
License
MIT
Repository
github
Last release
5 years ago

decorated-rabbit

Do not use. To experimental at this stage.

This library provides NodeJS service applications with both a client and service library for RabbitMQ through the use of class and method decorators.

Supported message-queue patterns:

RPC (remote procedure call)

Worker (competing consumers pattern)

FNF (fire and forget)

PubSub (publish-subscribe)

Topic (topics)

It is the project goal to supply implementations for all of the RabbitMQ patterns (see https://www.rabbitmq.com/getstarted.html) but more.

As a simple MQ client

import {Client as MQClient} from 'decorated-rabbit';

let result, client = MQClient();
client.connect({uri: 'amqp://someserver:<PORT>'})
	.then(_=> {
		result = await client.message().rpc.invoke('some_message',{a:1, b:2});
	});

Default service usage as a decorated class

import {withRabbit, rpc} from 'decorated-rabbit'

@withRabbit({endpoint: 'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'})
class MyClass {

  @rpc()
  myRPCListener( msg ) {
    return { addage: (msg.value + 1) }
  }
}

Default client usage as a decorated class

import {withRabbit} from 'decorated-rabbit';

@withRabbit({endpoint: 'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'})
class MyClass {

    async invokeThat() {
        let response = await this.mq.rpc.invoke('myRPCListener', {value: 1});
        console.log(response); // {addage:2}
    }
}

Default client usage as a instance

import DecoratedRabbit from 'decorated-rabbit';

class MyClass {

    async invokeThat() {
    
        this.mq = new DecoratedRabbit({endpoint:'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'});
        let connected = await this.mq.initialize();
    
        let response = await this.mq.rpc.invoke('myRPCListener', {value: 1});
        console.log(response); // {addage:2}
    }
}

Attaching an RPC listener which will respond to the RPC queue "my_rpc_queue"

import {withRabbit} from 'decorated-rabbit';

@withRabbit({endpoint: 'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'})
class MyClass {

	@rpc()
    async my_rpc_queue( args ) {
      return { addOne: (args.value + 1) }
    }
}

Attaching a topic listener to the topic exchange myExchange for topic my_topic.*

invoked from the client class as `response = await this.mq.topic.publish('my message', 'myExchange', 'my_topic.*');

import {withRabbit} from 'decorated-rabbit';

@withRabbit({endpoint: 'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'})
class MyClass {

	@topic({subscribe:'myExchange:my_topic.*})
    async myTopic( msg ) {

		..do something..
    }
}

Attaching an Fire and Forget listener on queue my_fnf

import {withRabbit} from 'decorated-rabbit';

@withRabbit({endpoint: 'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'})
class MyClass {

	@fnf()
    async my_fnf( args ) {
      ...do something...
    }
}

Attaching an Worker listener for queue work_hard

import {withRabbit} from 'decorated-rabbit';

@withRabbit({endpoint: 'amqp://<user>:<pass>@your_rabbit_mq:<port>', exchange: 'yourexchange'})
class MyClass {

	@worker()
    async work_hard args ) {
      ...do something...
    }
}
0.1.30

5 years ago

0.1.29

5 years ago

0.1.28

5 years ago

0.1.27

5 years ago

0.1.26

5 years ago

0.1.25

5 years ago

0.1.24

5 years ago

0.1.23

5 years ago

0.1.22

5 years ago

0.1.21

5 years ago

0.1.20

5 years ago

0.1.19

5 years ago

0.1.18

5 years ago

0.1.17

5 years ago

0.1.16

5 years ago

0.1.15

6 years ago

0.1.14

6 years ago

0.1.13

6 years ago

0.1.12

6 years ago

0.1.11

6 years ago

0.1.10

6 years ago

0.1.9

6 years ago

0.1.8

6 years ago

0.1.7

6 years ago

0.1.6

6 years ago

0.1.5

6 years ago

0.1.4

6 years ago

0.1.3

6 years ago

0.1.2

6 years ago

0.1.1

6 years ago

0.1.0

6 years ago