We are going to do the production deployment of Reuter Elektron adaptor at Integral and would like to know few extra details regarding the connectivity and disconnection issues.
If there is a situation when our application is connected to Reuter Elektron and getting rates, at this point if the connection has been dropped or closed by Reuter Elektron for some reason, how our application will come to know about the disconnection and reason behind it?
Will Reuter Elektron send any kind of disconnection notification to the application in such cases or is there any api we need to poll from application side time to time to check the health/connectivity status of the connection?
One possible way to know disconnection with details is in the answer in this question. If the server does not send the reason why it disconnects, you have to check the server log file.
Another way is to use ChannelInformation interface and check the channel state. The interface is about the out bound channel used to connect for receiving data. For example when the connection is closed, example170__MarketPrice__ChannelInfo prints:
event channel info (status) hostname: 192.168.27.15 IP address: not available for OmmConsumer connections connected component info: unavailable channel state: closed connection type: socket protocol type: Reuters wire format major version: 14 minor version: 1 ping timeout: 30 max fragmentation size: 0 max output buffers: 0 guaranteed output buffers: 0 number input buffers: 0 system send buffer size: 0 system receive buffer size: 0 compression type: none compression threshold:
Please more details of this interface, please refer to Elektron Message API Java Edition Reference Manual
The most common reason for disconnection is "overflow condition". You can verify this in the server log. The message looks like:
RSSL disconnect from "xxx" at position "x.x.x.x" on host "abc" using application "" on channel xx. Reason: User using application on channel xx has been disconnected due to an overflow condition.
If you found this error in the server log, it could indicate that the application is a slow consumer.
The Buffer Overflow condition generally occurs once the Consumer application cannot keep up with the amount of data that is received, so the server needs to store data in its outbound buffer and disconnect the Consumer client once the buffer exceeds limitation.
For more information, please refer to this thread.