Live data from Hacker News

Ask HN: What's your go-to message queue in 2025?

news.ycombinator.com

91–99 of 99 posts

Re: Ask HN: What's your go-to message queue in 2025?

#91

I played with most message queues and I go with RabbitMQ in production. Mostly because it has been very reliable for years in production at a previous company, and doesn’t require babysitting. Its recent versions also has new features that make it is a descent alternative to Kafka if you don’t need to scale to the moon. And the logo is a rabbit.

Just used it as a Celery (job queue) backend. How is it a Kafka alternative?

Re: Ask HN: What's your go-to message queue in 2025?

#92

I played with most message queues and I go with RabbitMQ in production. Mostly because it has been very reliable for years in production at a previous company, and doesn’t require babysitting. Its recent versions also has new features that make it is a descent alternative to Kafka if you don’t need to scale to the moon. And the logo is a rabbit.

Just used it as a Celery (job queue) backend. How is it a Kafka alternative?

RabbitMQ streams: https://www.rabbitmq.com/docs/streams

Re: Ask HN: What's your go-to message queue in 2025?

#94
Redis Streams is a "go-to" for me, mostly because of operational simplicity and performance. It's also dead simple to write consumers in any language. If I had more stringent durability requirements, I would probably pick Redpanda, but Kafka-esque (!) processing semantics can be daunting sometimes.

I didn't have anything but bad experiences with RabbitMQ, maybe I cannot "cook" it, but it would always go split-brain, or last issue I had, a part of clients connected to certain clustered nodes just stopped receiving messages. Cluster restart helped, but all logs and all metrics were green and clean. I try to avoid it if I can.

ZeroMQ is more like a building block for your applications. If you need something very special, it could be a good fit, but for a typical EDA-ish bus architecture Redis or Kafka/Redpanda are both very good.

Re: Ask HN: What's your go-to message queue in 2025?

#95

For large applications in a service-oriented architecture, I leverage Kafka 100% of the time. With Confluent Cloud and Amazon MSK, infra is relatively trivial to maintain. There's really no reason to use anything else for this. For smaller projects of "job queues," I tend to use Amazon SQS or RabbitMQ. But just for clarity, Kafka is not really a message queue -- it's a persistent structured log that can be used as a…

> This means you can really only have one client per topic, because once the message is consumed, it's no longer available to anyone else. It depends on your use case (or maybe what you mean by "client"). If I just have a bunch of messages that need to be processed by "some" client, then having the message disappear once a client has processed it is exactly what you want.

Absolutely, if you only ever have one client, SQS or a message queue is perfectly fine!

Re: Ask HN: What's your go-to message queue in 2025?

#96
post #25

For large applications in a service-oriented architecture, I leverage Kafka 100% of the time. With Confluent Cloud and Amazon MSK, infra is relatively trivial to maintain. There's really no reason to use anything else for this. For smaller projects of "job queues," I tend to use Amazon SQS or RabbitMQ. But just for clarity, Kafka is not really a message queue -- it's a persistent structured log that can be used as a…

We build applications very differently. SQS queues with 1000s of clients have been a go to for me for over a decade. And the opposite as well — 1000s of queues (one per client device, they’re free). Zero maintenance, zero cost when unused. Absurd scalability.

Certainly. There are many paths to victory here.

One thing to consider is whether you _want_ your producers to be aware of the clients or not. If you use SQS, then your producer needs to be aware of where it's sending the message. In event-driven architecture, ideally producers don't care who's listening. They just broadcast a message: "Hey, this thing just happened." And anyone who wants to subscribe can subscribe. The analogy is a radio tower -- the radio broadcaster has no idea who's listening, but thousands and thousands of people can tune in and listen.

Contrast to making a phone call, where you have to know who it is that you're dialing and you can only talk to one person at a time.

There are pros and cons to both, but there's tremendous value in large applications for making the producer responsible for producing, but not having to worry about who is consuming. Particularly in organizations with large teams where coordinating that kind of thing can be a big pain.

But you're absolutely right: queues/topics are basically free, and you can have as many as you want! I've certainly done it the SQS way that you describe many times!

As I mentioned, there are many paths to victory. Mine works really well for me, and it sounds like yours works really well for you. That's fantastic :)

Re: Ask HN: What's your go-to message queue in 2025?

#97

For my extremely specialized case, I use a SQLite database as a message queue. It absolutely wouldn't scale, but it doesn't need to. It works extremely well for what I need it to do.

I would join in asking for more details. I have an idea of a project where even MySql/Maria is too much of admin burden.

There's very little to it, really, just a messages table with a id INTEGER PRIMARY KEY AUTOINCREMENT column (autoincrement to prevent id reuse, which is otherwise legal), a payload TEXT NOT NULL column (which is usually JSON encoded), and, in my case, a TEXT json annotations column, with some computed indexes. A publisher just pushes rows in, and a subscriber takes an exclusive lock to grab the first row matching the annotations that it cares about (I use DELETE RETURNING, but you can make it work however you need).

You can use `PRAGMA data_version` on a dedicated thread to watch for changes and notify other waiters via a condition variable. It's not the nicest solution, because it's just a loop around a query, but it gets the job done.

A req-rep pattern can be done by doing a `INSERT ... RETURNING id` and having the the other side re-push into the same or a different message queue with an annotation referring to that id. Alternatively, you could have a table with a req, rep, and status column to coordinate it all.

It's far from everything you'd need from a complete, robust message broker, but for small single or multi-process message queue with a max of a few dozen readers and writers, it gets the job done nicely. In a single process, you can even replace the data_version loop thread with `sqlite3_commit_hook` on writers to notify readers that something has changed via the condition_variable.

Re: Ask HN: What's your go-to message queue in 2025?

#99
post #34

Earlier quoted context omitted.

Datadog too. i often wonder how come more companies dont pick cute mascots. gives a logo, makes everyone have warm fuzzies immediately, creates pun opportunities. inb4 "oh but you wont be taken seriously" well... datadog.

Hugging face clearly shares the same philosophy

but usually I only see the namw "huggingface" written, and I think of headcrabs from half-life instead
Post reply on HN