This article is an extended version of my presentation about RabbitMQ to my coworkers. I’m publishing it just for fun.

I’ll cover basic RabbitMQ concepts. We will implement Producer/Consumer POC with reconnecting and graceful shutdown. You’ll learn how to implement preserving partial message order using rabbitmq_consistent_hash_exchange plugin.

As a bonus, you’ll see an example of how to use Nomad for local development environment management and Mage as a makefile alternative.

For a link to the source code scroll to the bottom of the article.

Messaging and queues in general

Today, any system that is a little more than just a TODO list app, cannot live…


In the company, I currently work we are dealing with many external APIs. This short story is about API integration that sometimes didn’t work because of a single invisible character. I’ll not provide the name of the company, so let just refer to it as a “Company” :)

In this specific case, the Company knows to send webhooks to our exposed and secured HTTP endpoints.

One day we started to see error logs, meaning we cannot verify the request signature, and that’s where our small journey starts…

Spoiler: “People still copy text from Microsoft Word with all these hidden characters…”


After we built a generic TCP proxy, we can continue with our journey. Today’s goal will be to understand the MySQL Protocol, receive, decode, encode and send to the client the first packet sent by the MySQL Server.

MySQL connections threads

Each client connection to MySQL Server handled by a thread. MySQL is portable, so the underhood threads implementation is system dependent (Windows, macOS, and Linux have their own threads implementation).

What important to us, it’s to understand that a single client connection is handled by a corresponding thread in MySQL. This thread is responsible to do authentication and executing all the queries…

Weekend. Quarantine. If you bored like me, and want to learn something new, you can join my journey of writing yet another MySQL Proxy Server.

In the past, I had a crazy idea of writing MySQL Proxy Server. The first reason was to understand the MySQL Communication Protocol to let me write more efficient programs. The second one was to learn more about low-level network programming concepts in general. Finally, I have time at least to start… and you can join me!

The real usage of MySQL Proxy can vary:

  • Testing and benchmarking of the infrastructure
  • Testing your applications for…

We will write a small tool that will help us with mongo query profiling and tracing. It’s very handy when you want to see all queries currently executed in MongoDB. I use it mostly to find long-running queries, queries that don’t use indexes or tracing a business flow in case of a bug.

Main requirements

  • Print currently executing queries to stdout in raw or human-friendly form
  • Knows to work with a replica set
  • Support for config files (cause we have many environments)

The research

Before we start, let’s talk about MongoDB profiler. …

I believe not every young software company or startup has those problems, but from my experience, those 5 are the most common issues I met as a developer. They look trivial but create so much pain to the developers and the business.


Each startup I worked in (some of them went to production after just a year of intensive development, others already have been in production for a few years and have a huge codebase with hundreds of clients that already use the product), had almost zero logs.

The lack of logs makes it very difficult to understand, why something…

What are you doing when you looking for a new job? Right, you are going to contact HR or search on websites like LinkedIn, Glassdoor, StackOverflow, etc.

Let’s try another approach :) Did you hear about ‘X-Recruiting’ header? For example, if you look at response headers from, you can see this ‘strange’ header.

Interesting, how many companies use this smart way to find appropriate candidates?

We will try to answer this question using GO and AWS Free-tier instance. You can run the app on your own machine if you have a stable and good internet connection. …

Alexander Ravikovich

In GO we trust. Software Engineer.

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store