Some of Martin's rationale here:
https://250bpm.com/blog:23/index.html
ZeroMQ is still widely used and popular, but I am not sure if it is still actively developed.
Some of Martin's rationale here:
https://250bpm.com/blog:23/index.html
ZeroMQ is still widely used and popular, but I am not sure if it is still actively developed.
All of them are based on specs that are widely published. I've had zero problems implementing real robotic systems in nng, zmq, etc.
And it is so damn easy to use it's amazing to me the whole world doesn't use it.
Perhaps many of them are locked into “the cloud” and “serverless”, by default choosing the proprietary solutions offered by these providers on their platforms?
I Googled nng and apparently it's this? [1]
It's written in C so if you click the issues tab the second and third issues are "IPC - Use After Free" and "Setting TLS config option via nng_socket_set_ptr causes access violation if you free config."
Why would you want the world to build other software on this?
nng looks promising, but the guide from zmq seemed like a killer feature. It describes all sorts of high level patterns, gotchas, etc.
For nng I mostly found API documentation, which made me a bit more cautious (though to be fair, I've not tried it yet).
However, I have used NetMQ.. a C# implementation of ZeroMQ in live software and the results are very positive!
I used a Pub-Sub pattern for one program to keep users informed on progress of a task, which could have taken hours to complete. They had a GUI program which spits out updates. It worked really well.
I was also tasked updating a Till software, which the integration of orders to the central system was extremely slow. I used NetMQ which was looking extremely successful but was put on hold due to IT manager not understanding Software Developers -- if something starts taking more than a week to do (which I stated I needed a month) they get itchy and move onto to something else. Sadly, that never got completed.
Now, I have played with NNG and there are some interested articles (or hidden pages from memory) about companring NNG to ZeroMQ - it seems the "patterns" are simplified.
I am currently in the progress of creating bindings for NNG. Seems to be pretty good, so far. I plan to move away from NetMQ (C#) in favour of this language moving forward.
Whether you use ZeroMQ or NNG - I dont think you can go wrong. It is all about the process more than anything, ensuring you do not lose data.
It was very easy to build a multi-node, distributed event processing engine (think Apache Flink) that could scale by simply adding more nodes or threads. ZMQ makes coordination and management of messages easy and low-fanfare.
In our use case, it was stable and it was the least problematic part of a relatively complex platform.
orders = -setup req rep socket-
while 1:
----order = orders.read (with timeout)
----orders.send(ack)
----if order:
--------do stuff differently
----news.send(status)
There's a similar problem with MQTT where the spec explicitly disclaims the ordering of messages across topics. Lots of people just ignore this and write software that works perfectly fine in the real world where messages generally get transported in order anyway. But it's still technically incorrect and strikes me as a breeding ground for Heisenbugs.
It's a problem that the transport level would normally solve and then provide a single coherent stream to the higher layer. But with 0mq providing multiple parallel streams between each pair of endpoints means that events from each of those streams aren't necessarily received in relative order
zeromq isn't forcing you to use multiple streams. you can just use one. reqrep, send your command, wait for the response after it's done.