Currently, the inventory service works in a single thread, and with a blocking socket. This means that it can handle only one request at a time; if a new request is received while other requests are being processed, the client will have to wait until all previous requests have finished processing. Obviously, this does not scale very well.
In order to implement a server that can handle multiple requests in parallel, you can employ ZeroMQ's ROUTER/DEALER pattern. A ROUTER is a special kind of ZeroMQ socket that behaves very much like a regular REP socket, with the only difference being that multiple REQ sockets can connect to in parallel. Likewise, a DEALER socket is another kind of socket that is similar to an REQ socket, only that it can be connected to multiple REP sockets. This allows you to construct a load balancer that simply consists of one ROUTER and one DEALER socket that pipes packages from a set of multiple clients to a set of multiple...