npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

mr-consumer

v0.1.2

Published

Effortlessly consume your data from RabbitMQ with a clean.

Readme

Mr.Consumer

Node.js CI Tests

Effortlessly consume your data from RabbitMQ with a clean, TypeScript-friendly API.

Introduction

The MrConsumer layer allows you to achieve significant benefits in the following parts of writing code:

  • Make development process clear for all participants
  • Speed up the development of production-ready projects
  • Avoid complexity
  • Reduce coupling

So, developers and Mr.Consumer have to be friends🤝 forever at least for reasons outlined above.

Installation

Just one step.

npm i mr-consumer

And use it where you need it.

import { MrConsumer } from 'mr-consumer';

Setup

To get started, simply connect a RabbitMQ channel to your Mr.Consumer and define your list of possible queues.

import { MrConsumer } from 'mr-consumer';
import { rabbitMQ } from './rabbitMQ';

enum MessageBrokerQueue {
  coreMessageCreated = 'core.message.created',
}

export function Consumer<ConsumerResponse extends object>() {
  return class Consumer extends MrConsumer<
    ConsumerResponse,
    MessageBrokerQueue
  >() {
    async setupChannel() {
      return rabbitMQ.getChannel();
    }
  };
}

You can configure RabbitMQ however you prefer for use with MrConsumer.

import amqp, { Channel, ChannelModel } from 'amqplib';

let connection: ChannelModel;
let channel: Channel;

async function getConnection(): Promise<amqp.ChannelModel> {
  if (!connection) {
    const rabbitUrl = process.env.RABBITMQ_URL ?? '';
    connection = await amqp.connect(rabbitUrl);
  }

  return connection;
}

async function getChannel(): Promise<Channel> {
  if (!channel) {
    const conn = await getConnection();
    channel = await conn.createChannel();
  }

  return channel;
}

const rabbitMQ = {
  getConnection,
  getChannel,
};

export { rabbitMQ };

Overview

This section contains a simple case that shows us an example of Mr.Consumer implementation. Let's take a quick look at the following piece of code:

import { MessageBrokerQueue } from '../utils/mr.consumer';

interface ConsumerResponse {
  message: {
    uuid: string;
  };
}

export class SampleMessageCreatedConsumer extends Consumer<ConsumerResponse>() {
  queueName = MessageBrokerQueue.coreMessageCreated;

  async handlePayload() {
    // Process the received message
    const { message } = this.payload;
    // Your business logic here
    await this.processMessage({ message });
  }

  private async processMessage({ message }: { message: { uuid: string } }) {
    // Implement your message processing logic
    // For example: save to database, send notifications, etc.
  }
}

Now you can start consuming messages from the queue:

await SampleMessageCreatedConsumer.consume();

As you can see, the code is pretty simple and easy to user.

Now let's see how we may use it in the positive scenario:

Conclusion

Using consumers makes your workflow simpler, more organized, and efficient. Mr.Consumer offers an intuitive interface so you can enjoy these benefits without any hassle.

Give it a try!

⚠️ At this moment you probably would like to see an integration of the module to something more ready to use. And specifically for this purpose 🐨 Mr.Koa boilerplate exists.