Using the majordomo broker with asynchronous clients

Without setting the HWM and using the default TCP settings, packet loss was being incurred with just 50k messages.

The following helped to mitigate the packet loss at the broker:

  1. Setting the HWM for the zeromq socket.
  2. Increasing the TCP send/receive buffer size.

This helped only up to a certain point. With two clients, each sending 100k messages, the broker was able to manage fine. But when the number of clients was increased to three, they stopped receiving all the replies.

Finally, what has helped me to ensure no packet loss is to change the design of the client code in the following way:

  1. A client can send upto N messages at once. The client's RCVHWM and broker's SNDHWM should be sufficiently high to hold a total of N messages.
  2. After that, for every reply received by the client, it sends two requests.