As a temporary workaround for issue mentioned here https://community.developers.refinitiv.com/questions/28182/ema-ommconsumer-memory-leak-in-java-api.html we implemented a pool of consumers. It works, but now we faced another issue:
When the consumer sits idle in the pool it eventually disconnects from Reuters and when we eventually want to use it and query some data, we receive errors for few first attempts:
"Open / Suspect / None / 'Service not up'"
then for few next calls:
"Open / Suspect / None / 'Service not available'"
and then at some moment we start receiving actual data for all following calls, until we stop requesting data and consumer goes to idle state again for some time, in which case the whole scenario repeats.
We increased ConnectionPingTimeout parameter to 5 minuts, but then we have just a new limitation of 5 minutes for idling the consumer.
Since this parameter name is referring to "ping" I was expecting there is a "ping" going on behind the scene, but it turns out it's not (or is it?), so we implemented our own "kind of" ping mechanism, where we request snapshot data for one symbol every interval.
It's working, but it's far from ideal.
Is there a more appropriate way to keep the idle consumer "alive"?
Based on the client given information, the application has multiple users. The application creates a new consumer every time when user requested data and then dispose the consumer. This is possible the root cause of this issue.
The client reported that somehow memory allocated for consumer was not freed and the application were quickly running out of memory. The API 3rd level support team has investigated the issue and found the following information:
Normally, a memory usage can grow over time until JVM performs a garbage collection. So, the customers need to monitor the application in long run to check the graph if the usage level drops and makes it looks like a zig-zag pattern or not. If there is a memory leak potential, the zig-zag pattern will also slope up as well.
Do you have an example on how to use : " rtmesBuffer" ? RMTES Decoder EMA provides a built in RMTES decoder. If desired, application may cache RmtesBuffer objects and apply all the received changes to them