Mongo Queueing - .NET Core message queue with MongoDB

 📨📨📨

Open Source Message Queueing

NuGet version  Test Workflow Status Badge

Official Homepage of the open source package AllQuiet.MongoQueueing. The package aims to provide a super easy to use mechanism to enqueue messages and process them in a .NET Core application.

Sources

Source code is available at GitHub

Download

Binary package is available to download at NuGet

Quick Example

Motivation

Learn more about why we created an open source project in our blog post.

Use Cases

  • You have a website where users can register. You want to send out a double-opt-in email asynchronously after registering.
  • You want to send out a reminder email after 24h after registering.
  • You want to call a third party service that can fail (your own network, downtime of service etc.). You want to retry the call in case of failure.
  • You have other long running tasks that should be executed after a user's operation.

Characteristics

  • Supports high availability out of the box. You can run as many processes as you like. MongoDB's atomic operations ensure that messages are processed only once.
  • Guarantees FIFO dequeueing but cannot guarantee order of execution of your messages when running multiple processes.
  • Supports different queues, so you can have a high priority queue.
  • Supports scheduling of messages (define the time when a message should be dequeued)

What about RabbitMQ, ZeroMQ, Kafka etc?

MongoQueueing was created during the development of the All Quiet incident escalation platform. We wanted to keep our tech-stack as simple as possible. Since we were using MongoDB as a database, we didn't want to introduce more moving parts in our infrastructure.

It's not a replacement for near-realtime queueing systems like RabbitMQ. Neither does it provide pub/sub functionalities. It's just really a dead simple mechanism to execute tasks asynchronously in your .NET Core application. Don't use it to create your fancy distributed mircoservice architecture. Use it for the above mentioned use cases.