I've been pleased by NATS (https://nats.io/). I like how it builds its functionality on layers of abstractions, from the most basic (pub/sub), to request/response on top of that, to key/value and persistent streams on top of that. The CLI is simple to use and you can learn it in an afternoon, but it's robust enough to deploy.