# foo-foo-mq

> Abstractions to simplify working with the RabbitMQ

Latest version **10.0.0** (published 2026-06-01) · MIT license · 0 weekly downloads

## Install

```sh
npm install foo-foo-mq
pnpm add foo-foo-mq
yarn add foo-foo-mq
bun add foo-foo-mq
```

## Health

**Score 55/100 (C)** — status: active.

Positive: has types; no vulnerabilities; high quality score.

Warnings: low downloads; no esm support.

## Facts

| | |
|---|---|
| Version | 10.0.0 |
| Published | 2026-06-01 |
| First published | 2019-09-18 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | bundled |
| Module format | CommonJS |
| Node | >=20 <=24 |
| Dependencies | 7 |
| Unpacked size | 217.7 KB |
| Known vulnerabilities | 0 (+1 in 1 direct dependencies) |
| Install scripts | no |
| GitHub stars | 49 |
| Author | Foo-Foo-MQ Team |
| Maintainers | zlintz, auroq |

## Links

- npm: https://www.npmjs.com/package/foo-foo-mq
- Repository: https://github.com/Foo-Foo-MQ/foo-foo-mq
- Homepage: https://github.com/Foo-Foo-MQ/foo-foo-mq#readme
- Issues: https://github.com/Foo-Foo-MQ/foo-foo-mq/issues
- npm.io page: https://npm.io/package/foo-foo-mq

## Dependencies (7)

- [bole](https://npm.io/package/bole.md) ^4.0.0
- [uuid](https://npm.io/package/uuid.md) ^8.2.0
- [debug](https://npm.io/package/debug.md) ^4.1.1
- [postal](https://npm.io/package/postal.md) ^2.0.5
- [amqplib](https://npm.io/package/amqplib.md) ~0.8.0
- [machina](https://npm.io/package/machina.md) ^4.0.2
- [node-monologue](https://npm.io/package/node-monologue.md) ^2.0.0

## Recent versions

- 10.0.0 (latest) — 2026-06-01
- 9.2.0 — 2024-11-14
- 9.1.0 — 2024-04-09
- 9.0.3 — 2024-01-25
- 9.0.2 — 2024-01-25
- 9.0.1 — 2023-11-19
- 9.0.0 — 2023-11-19
- 8.0.1 — 2023-05-03
- 8.0.0 — 2023-02-19
- 7.1.0 — 2022-07-02
- 7.0.0 — 2021-07-18
- 6.0.0 — 2021-05-11
- 5.1.0 — 2021-03-14
- 5.0.0 — 2020-08-17
- 4.0.4 — 2020-07-12
- … 4 more at https://npm.io/package/foo-foo-mq/versions

## README

# foo-foo-mq

[![Build Status][travis-image]][travis-url]
[![Coverage Status][coveralls-image]][coveralls-url]
[![Version npm][version-image]][version-url]
[![npm Downloads][downloads-image]][downloads-url]
[![Dependencies][dependencies-image]][dependencies-url]
[![Commitizen friendly](https://img.shields.io/badge/commitizen-friendly-brightgreen.svg)](http://commitizen.github.io/cz-cli/)

This is a very opinionated abstraction over amqplib to help simplify the implementation of several messaging patterns on RabbitMQ.

> !Important! - successful use of this library will require a conceptual knowledge of AMQP and an understanding of RabbitMQ.

### Features:

 * Attempt to gracefully handle lost connections and channels
 * Automatically re-assert all topology on re-connection
 * Support the majority of RabbitMQ's extensions
 * Handle batching of acknowledgements and rejections
 * Topology & configuration via JSON (thanks to @JohnDMathis!)
 * Built-in support for JSON, binary and text message bodies
 * Support for custom serialization

### Assumptions & Defaults:

 * Fault-tolerance/resilience over throughput
 * Prefer "at least once delivery"
 * Default to publish confirmation
 * Default to ack mode on consumers
 * Heterogenous services that include statically typed languages
 * JSON as the default serialization provider for object based message bodies

## Documentation You Should Read

 * [Connection Management](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/docs/connections.md) - connection management
 * [Topology Setup](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/docs/topology.md) - topology configuration
 * [Publishing Guide](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/docs/publishing.md) - publishing and requesting
 * [Receiving Guide](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/docs/receiving.md) - subscribing and handling of messages
 * [Logging](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/docs/logging.md) - how foo-foo-mq logs

## Other Documents

 * [Contributor Guide](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/HOW_TO_CONTRIBUTE.md)
 * [Code of Conduct](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/CODE_OF_CONDUCT.md)
 * [Resources](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/RESOURCES.md)
 * [Maintainers](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/MAINTAINERS.md)
 * [Contributors](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/CONTRIBUTORS.md)
 * [Acknowledgements](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/ACKNOWLEDGEMENTS.md)
 * [Change Log](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/CHANGELOG.md)
 * [Differences From Wascally](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/docs/notwascally.md)

## Demos

 * [pubsub](https://github.com/Foo-Foo-MQ/foo-foo-mq/blob/master/demo/pubsub/README.md)

## API Example

This contrived example is here to make it easy to see what the API looks like now that documentation is broken up across multiple pages.



```js
const rabbit = require('foo-foo-mq');

rabbit.handle('MyMessage', (msg) => {
  console.log('received msg', msg.body);
  msg.ack();
});

rabbit.handle('MyRequest', (req) => {
  req.reply('yes?');
});

rabbit.configure({
  connection: {
    name: 'default',
    user: 'guest',
    pass: 'guest',
    host: 'my-rabbitmq-server',
    port: 5672,
    vhost: '%2f',
    replyQueue: 'customReplyQueue'
  },
  exchanges: [
    { name: 'ex.1', type: 'fanout', autoDelete: true }
  ],
  queues: [
    { name: 'q.1', autoDelete: true, subscribe: true },
  ],
  bindings: [
    { exchange: 'ex.1', target: 'q.1', keys: [] }
  ]
}).then(
  () => console.log('connected!');
);

rabbit.request('ex.1', { type: 'MyRequest' })
  .then(
    reply => {
      console.log('got response:', reply.body);
      reply.ack();
    }
  );

rabbit.publish('ex.1', { type: 'MyMessage', body: 'hello!' });


setTimeout(() => {
  rabbit.shutdown(true)
},5000);
```

## Roadmap
 * improve support RabbitMQ backpressure mechanisms
 * add support for Rabbit's HTTP API

[travis-image]: https://travis-ci.org/Foo-Foo-MQ/foo-foo-mq.svg?branch=master
[travis-url]: https://travis-ci.org/Foo-Foo-MQ/foo-foo-mq
[coveralls-url]: https://coveralls.io/github/Foo-Foo-MQ/foo-foo-mq?branch=master
[coveralls-image]: https://coveralls.io/repos/github/Foo-Foo-MQ/foo-foo-mq/badge.svg?branch=master
[version-image]: https://img.shields.io/npm/v/foo-foo-mq.svg?style=flat
[version-url]: https://www.npmjs.com/package/foo-foo-mq
[downloads-image]: https://img.shields.io/npm/dm/foo-foo-mq.svg?style=flat
[downloads-url]: https://www.npmjs.com/package/foo-foo-mq
[dependencies-image]: https://img.shields.io/david/Foo-Foo-MQ/foo-foo-mq.svg?style=flat
[dependencies-url]: https://david-dm.org/Foo-Foo-MQ/foo-foo-mq

---
_Source: https://npm.io/package/foo-foo-mq · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
