DEV Community

Peter
Peter

Posted on

1

Qutrunk - open source REST/gRPC interface with GUI

I've just open sourced our internal project - Qutrunk. It is a simple REST API interface for interacting with queues. It supports multiple backends (RabbitMQ, MongoDB, Redis at the moment), access tokens for each queues, message logs & statistics. The app comes with GUI accessible via webrowser.
Github: https://github.com/spinache/qutrunk-api
Website & SaaS app: https://qutrunk.com

Features
5 minutes setup
PUSH and PULL messages with simple GET & POST
Manage queues from web GUI
Create queue with first message
Multiple backends (currently MongoDB, RabbitMQ, Redis)
Multiple ingestion/digestion protocols (currently HTTP(S), gRPC)
Queue usage statistics and aditing (message log)
Access tokens with access control for pushing/pulling/creating queues
StatsD metric export
Example usage
You can simply push message with single command

curl --request POST \
--url 'https://app.qutrunk.com/api/v1/core/push/{QUEUE_NAME}?access_token=ACCESS_TOKEN' \
--data 'hello world'
and pull it with another

curl --request GET --url 'https://app.qutrunk.com/api/v1/core/pull/{QUEUE_NAME}?access_token={ACCESS_TOKEN}'
More examples in Golang, Node.js, Java, PHP in docs

Supported protocols for ingest/digest of messages
HTTP(S)
gRPC
Soon:

Websockets
AMQP
Missing your favourite protocol? File an issue to let us know.

Supported backends
MongoDB
RabbitMQ
Redis
Soon:

PostgreSQL
MariaDB
Not having your preferred backend? File an issue to let us know or write your own integration and create a pull request.

Installation & configuration
To install Qutrunk just simply clone the repository and install all required dependencies:

git clone git@github.com:spinache/qutrunk-api.git
cd qutrunk-api;
npm install;
cp config.js.dist config.js;
For in-depth configuration please refer to documentation

Running
We recommend starting at least two Node.js processes that listen to HTTP requests. You can setup a reverse proxy like Nginx in front of those processes that will also handle SSL handshakes. For more details refer to docs.

pm2 start --name=app_3001 app.js -- --port=3001
pm2 start --name=app_3002 app.js -- --port=3002
Hosted version
You can use our hosted version of Qutrunk: https://qutrunk.com/

It comes with small quota of about 25 000 messages per month but its suitable for any pet/small project.

If you need a higher quota, please contact us: contact@qutrunk.com

Motivation
Qutrunk was created as an internal tool to integrate tens of internal services where any of them needed a queue. We needed to track usages and access across all of them and interact with queues using HTTP. Another reason was IoT, where we used Qutrunk as a queue provider with HTTP interface we can use on Raspberry, ESP8266 known as NodeMCU and other small development boards.

A blog post about using Qutrunk in IoT with example code in C

After all, we didn't find any similar tool that could use multiple backends that are managed from the GUI. Of course Qutrunk is not meant to be a competitor for projects like Kafka or RabbitMQ, its is more like overlay interface that provides additional features to queues.

Currently we have a single deployment on 3-node cluster (each has 1 vCPU, 2gb RAM, 20 GB HDD) with MongoDB as replica and RabbitMQ with replication. It processes over 1 500 000 messages per day (about 17 msg/s) providing queue service for couple of our other internal projects.

Contact: contact@quturnk.com

This project is created and maintained by Code Fibers

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

nextjs tutorial video

Youtube Tutorial Series 📺

So you built a Next.js app, but you need a clear view of the entire operation flow to be able to identify performance bottlenecks before you launch. But how do you get started? Get the essentials on tracing for Next.js from @nikolovlazar in this video series 👀

Watch the Youtube series