If you have things running in a DC where connectivity between all nodes is possible, then ZMQ / NanoMsg will work, but having a broker tends to make things easier with regards to connectivity, which is why IoT always tends to use systems that require static brokers. Logging and monitoring might also be easier with a centralized broker, depending on your needs.
I've found NATS to be a pretty nice solution, its very lightweight and capable of doing low latency at most once delivery, as well as at least once. I've also found that the libraries are pretty decent and includes support for request/response among other things.