I honestly cannot comment on RabbitMQ or Kafka. I have not used them. I have also not used Redis other than learning.
However, a few years ago, I did use MSMQ (Microsoft Message Queue) and worked very well. However, at the time, I wanted something that didn't limit me to Windows.
In the end, I ended up learning ZeroMQ. Once I understood their "patterns" I created my own Broker software.
Originally, all requests (messages) sent to the Broker were being stored in files. Eventually, I moved over to Sqlite. As the broker is designed to process one thing at a time, was not worried multiple requests were going to sqlite. So now my Broker requires little dependencies.. except ZeroMQ and Sqlite.
(I did not need to worry about async processing as they get passed to the workers)
So, a broker is communicated with a client and a worker/consumer.
- client can ask for state (health of a queue, etc)
- client can send a message (to a queue, etc)
The worker communicates with the broker
- please connect me to this queue
- is there anything in this queue for me?
- here is the result of this message (success or failure)
etc.
I also made use of the pub-sub pattern. I made a GUI app that subscribes to these queues and feeds updates. If there are problems (failures) you can see them, here. I leave it to staff to re-send the message. If its already sent, maybe the subscriber missed that packet. pub-sub is not reliable, afterall.. but works 99% of time.
Overall it has been a great system for my needs -- again, it is lightweight, fast, and hardly costs anything. I do not need a beefy machine, either.
Honestly, I swear by this application (broker) i made. Now, am I comparing it to RabbitMQ or Kafka? No! I am sure these products are very good at what they do. However, especially for smaller companies I work for, this software has saved them a few pennies.
In all I found "Distributed computing" to be rewarding, and ZeroMQ+Sqlite have been a nice combination for my broker.
I have been experimenting with nanomsg-NG as a replacement for ZeroMQ but I just haven't spent proper time of it due to other commitments.