ZMQ publisher should advertise the IP address/hostname provided in -ORBendPointPublish if it is provided
Here is a situation where the configurable ZMQ ports do not work correctly.
Set up
- Two Docker containers D1 and D2 on two different hosts H1 and H2.
- H1 and H2 can reach each other over the network without problem.
-
-ORBendPointis set (=the interface to listen on, f.e. 0.0.0.0 or an interface local to the container) -
-ORBendPointPublishis set (=the IP/hostname to advertise how others can reach us, typically the hostname of the machine hosting the docker image) - ZMQ event ports are configured and mapped to the containers.
- In D1 runs Tango Device TD1.
- In D2 runs Tango Device TD2.
- device.ping() to the other device returns successful in both devices.
- TD1 tries to subscribe to an attribute change event in TD2.
Error message
errors = (DevError(desc = 'Event channel is not responding anymore, maybe the server or event system is down', origin = 'EventConsumer::KeepAliveThread()', reason = 'API_EventTimeout', severity = tango._tango.ErrSeverity.ERR),)
It appears that ZMQ honours only -ORBendPoint and listens only on that address and advertises only that address to others. This does not work if -ORBendPoint and -ORBendPointPublish differ, e.g. -ORBendPoint is set to 0.0.0.0.
Modifying the -ORBendPoint to use the hostname of the hosting machine is of no use, since in this situation the container simply does not have access to the host’s interfaces, and thus cannot listen on them.