Qutrunk - open source REST/gRPC interface with GUI
Tags: node, mongodb, php, java
Published: 2019-08-13 11:06:59

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