<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Peter</title>
    <description>The latest articles on DEV Community by Peter (@spinache).</description>
    <link>https://dev.to/spinache</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F211534%2Fccbd48d3-c5f9-4774-976d-9ba251603d32.png</url>
      <title>DEV Community: Peter</title>
      <link>https://dev.to/spinache</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/spinache"/>
    <language>en</language>
    <item>
      <title>Qutrunk - open source REST/gRPC interface with GUI</title>
      <dc:creator>Peter</dc:creator>
      <pubDate>Tue, 13 Aug 2019 11:06:59 +0000</pubDate>
      <link>https://dev.to/spinache/qutrunk-open-source-rest-grpc-interface-with-gui-39il</link>
      <guid>https://dev.to/spinache/qutrunk-open-source-rest-grpc-interface-with-gui-39il</guid>
      <description>&lt;p&gt;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 &amp;amp; statistics. The app comes with GUI accessible via webrowser. &lt;br&gt;
Github: &lt;a href="https://github.com/spinache/qutrunk-api"&gt;https://github.com/spinache/qutrunk-api&lt;/a&gt;&lt;br&gt;
Website &amp;amp; SaaS app: &lt;a href="https://qutrunk.com"&gt;https://qutrunk.com&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;curl --request POST \&lt;br&gt;
  --url '&lt;a href="https://app.qutrunk.com/api/v1/core/push/%7BQUEUE_NAME%7D?access_token=ACCESS_TOKEN"&gt;https://app.qutrunk.com/api/v1/core/push/{QUEUE_NAME}?access_token=ACCESS_TOKEN&lt;/a&gt;' \&lt;br&gt;
  --data 'hello world'&lt;br&gt;
and pull it with another&lt;/p&gt;

&lt;p&gt;curl --request GET --url '&lt;a href="https://app.qutrunk.com/api/v1/core/pull/%7BQUEUE_NAME%7D?access_token=%7BACCESS_TOKEN%7D"&gt;https://app.qutrunk.com/api/v1/core/pull/{QUEUE_NAME}?access_token={ACCESS_TOKEN}&lt;/a&gt;'&lt;br&gt;
More examples in Golang, Node.js, Java, PHP in docs&lt;/p&gt;

&lt;p&gt;Supported protocols for ingest/digest of messages&lt;br&gt;
 HTTP(S)&lt;br&gt;
 gRPC&lt;br&gt;
Soon:&lt;/p&gt;

&lt;p&gt;Websockets&lt;br&gt;
 AMQP&lt;br&gt;
Missing your favourite protocol? File an issue to let us know.&lt;/p&gt;

&lt;p&gt;Supported backends&lt;br&gt;
 MongoDB&lt;br&gt;
 RabbitMQ&lt;br&gt;
 Redis&lt;br&gt;
Soon:&lt;/p&gt;

&lt;p&gt;PostgreSQL&lt;br&gt;
 MariaDB&lt;br&gt;
Not having your preferred backend? File an issue to let us know or write your own integration and create a pull request.&lt;/p&gt;

&lt;p&gt;Installation &amp;amp; configuration&lt;br&gt;
To install Qutrunk just simply clone the repository and install all required dependencies:&lt;/p&gt;

&lt;p&gt;git clone &lt;a href="mailto:git@github.com"&gt;git@github.com&lt;/a&gt;:spinache/qutrunk-api.git&lt;br&gt;
cd qutrunk-api;&lt;br&gt;
npm install;&lt;br&gt;
cp config.js.dist config.js;&lt;br&gt;
For in-depth configuration please refer to documentation&lt;/p&gt;

&lt;p&gt;Running&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;pm2 start --name=app_3001 app.js -- --port=3001&lt;br&gt;
pm2 start --name=app_3002 app.js -- --port=3002&lt;br&gt;
Hosted version&lt;br&gt;
You can use our hosted version of Qutrunk: &lt;a href="https://qutrunk.com/"&gt;https://qutrunk.com/&lt;/a&gt;&lt;/p&gt;

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

&lt;p&gt;If you need a higher quota, please contact us: &lt;a href="mailto:contact@qutrunk.com"&gt;contact@qutrunk.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Motivation&lt;br&gt;
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.&lt;/p&gt;

&lt;p&gt;A blog post about using Qutrunk in IoT with example code in C&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;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.&lt;/p&gt;

&lt;p&gt;Contact: &lt;a href="mailto:contact@quturnk.com"&gt;contact@quturnk.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This project is created and maintained by Code Fibers&lt;/p&gt;

</description>
      <category>node</category>
      <category>mongodb</category>
      <category>php</category>
      <category>java</category>
    </item>
  </channel>
</rss>
