Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/stefanwalther/lepus

Convenience wrapper around amqplib.
https://github.com/stefanwalther/lepus

amqp amqp-client amqplib broker publisher rabbit rabbitmq subscriber taskqueue

Last synced: about 5 hours ago
JSON representation

Convenience wrapper around amqplib.

Awesome Lists containing this project

README

        

## lepus

> Convenience wrapper around amqplib.

[![CircleCI](https://img.shields.io/circleci/project/github/stefanwalther/lepus.svg)](https://circleci.com/gh/stefanwalther/lepus)
[![codecov](https://codecov.io/gh/stefanwalther/lepus/branch/master/graph/badge.svg)](https://codecov.io/gh/stefanwalther/lepus)

---

__NOTE__: This is absolutely not a complete or really working solution, I'm just implementing bits and bobs as I require them. Feel free to contribute.

---

## Features

- Connect to RabbitMQ & maintain a connection
- Retry to connect in case the connection fails or drops
- Publish a message
- Subscribe to a message

## Install

```
$ npm install lepus --save
```

## Usage

### Basic Usage

```
const Lepus = require('lepus');

(async () => {
let lepus = new Lepus();
await lepus.connect();

// Publish a message
let publishOpts = {
exchange: {
type: 'topic',
name: 'test'
},
key: 'test-key',
payload: {
foo: 'bar',
bar: 'baz',
date: new Date()
},
options: {}
};
await lepus.publishMessage(publishOpts);

// Subscribe to messages
let subscribeOpts = {
exchange: {
type: 'topic',
name: 'test'
},
key: 'test-key',
queue: {
name: 'test-key-queue'
}
};

await lepus.subscribeMessage(subscribeOpts, async (msgContent, msgRaw) => {

console.log('Hurray, we have received a message!');
console.log('=> msgContent', msgContent);
console.log('=> msgRaw', msgRaw);

});


// In case we want to disconnect ...
// await lepus.disconnect();

})();

```

### API

See [API docs](./docs/api-docs.md)

### Examples

- Connect to RabbitMQ: [./examples/connection.js](./examples/connection.js)
- Handle connection failure: [./examples/connection-failure.js](./examples/connection-failure.js)
- Publish a message: [./examples/publishMessage.js](./examples/publishMessage.js)
- Subscribe to a queue: [./examples/subscribeMessage.js](./examples/subscribeMessage.js)

## Contributing

Pull requests and stars are always welcome. For bugs and feature requests, [please create an issue](https://github.com/stefanwalther/lepus/issues). The process for contributing is outlined below:

1. Create a fork of the project
2. Work on whatever bug or feature you wish
3. Create a pull request (PR)

I cannot guarantee that I will merge all PRs but I will evaluate them all.

### Run tests

#### Unit tests:

```bash
$ npm run test:unit
```
#### Integration tests:

First start RabbitMQ locally:
```sh
$ docker-compose up -d
```

Then run the integration tests:
```bash
$ npm run test:unit
```

### Updating docs

```sh
$ make gen-readme
```

## References

Here are links & libraries that helped me:
- https://guidesmiths.github.io/rascal/
- https://github.com/lanetix/node-lanetix-amqp-easy
- https://github.com/nowait/amqp
- https://github.com/dial-once/node-bunnymq

Some inspirations for the topology functionality:
- https://github.com/LeanKit-Labs/rabbit-topology

AMQP Connection Mgmt:
- https://www.npmjs.com/package/amqp-connection-manager

## About

### Author
**Stefan Walther**

* [twitter](http://twitter.com/waltherstefan)
* [github.com/stefanwalther](http://github.com/stefanwalther)
* [LinkedIn](https://www.linkedin.com/in/stefanwalther/)

### License
MIT

***

_This file was generated by [verb-generate-readme](https://github.com/verbose/verb-generate-readme), v0.6.0, on March 30, 2018._