Hi Sir
If APP connect to Elektron via ServiceName= Elektron_DD, for some reason the service is down ( phisical connection is still OK) , what kind of status message will be sent from RFA to APP ? for instance , something like: disconnectServiceDown.
Hi @jessie.lin,
Referring to RFAJ_RDMUsageGuide.pdf (in <RFA Java Package>/Docs> folder), it uses ‘UPDATE’ message type to convey any changes information (e.g. service status in this case).
To demonstrate the example from the scenario that you mentioned in the question, we’ve performed the test as depicted in Figure 1.
Regarding the image above Connection A (between the feed and ADS/POP) is unstable, but it doesn’t affect to Connection B. However, a service status will change depending on Connection A.
In that case, ADS/POP will send directory ‘UPDATE’ message type to inform changes occurred to the consumer application (see Figure 2, and the message log attached).
test-directory-log.txt
Note: To check the change of service, the application needs to check Filter: STATE, Element: ServiceState (0: Service is Down, 1: Service is UP).
If you want to testDIRECTORY message type behavior, I recommend you try RFA Java’s example namedDictionaryDemo program. You can modify just a few files a little bit as shown below:
// Import ConfigDb to make the program to use hardcode configuration settingsimport com.reuters.rfa.config.ConfigDb;// At the init() method, make the application uses hardcode settingspublic void init() { // Create a programmatic configuration object. ConfigDb configDb = new ConfigDb(); configDb.addVariable("myNamespace.Sessions.mySession.connectionList", "myConnection"); configDb.addVariable("myNamespace.Connections.myConnection.connectionType", "RSSL"); configDb.addVariable("myNamespace.Connections.myConnection.serverList", "172.20.33.43"); configDb.addVariable("myNamespace.Connections.myConnection.portNumber", "14002"); configDb.addVariable("myNamespace.Connections.myConnection.logFileName", "console"); configDb.addVariable("myNamespace.Connections.myConnection.ipcTraceFlags", "31"); // Make the application use the object created previously. Context.initialize(getConfigDb()); System.out.println(getConfigDb()); ...
// At encodeSrcDirReqMsg(), make the example remove NONSTREAMING flag. private OMMMsg encodeSrcDirReqMsg() { ... msg.setIndicationFlags(OMMMsg.Indication.REFRESH /*| OMMMsg.Indication.NONSTREAMING*/); ...// At processEvent(Event event), comment two statements, and add a logic to support UPDATE_RESP message type.if (respMsg.isSet(OMMMsg.Indication.REFRESH_COMPLETE)) { // Receive all dictionary names from all source directory // Notify application to download dictionary// Comment these line.// _mainApp.processDirectoryInfo();// _dirHandle = null; // Because the request is NON-Streaming } } }// Add this condition else if (respMsg.getMsgType() == OMMMsg.MsgType.UPDATE_RESP) { System.out.println("Received update message type, there should be some changes regarding service directory "); }
Hope this helps.