Can use EMA Consumer(RTSDK) connecting to existed RFA Provider ?

Currently, We have an existed RFA system. It is using Consumer and Provider communicate by OMM.
So Can we use EMA Consumer (RTSDK) connecting to existed RFA Provider ?
Best Answer
-
Assuming they are both using the same RSSL transport - then an RFA Interactive Provider should be able to communicate with an EMA Consumer.
I have just done a basic test connecting the \StarterProvider_Interactive example from RFA with Consumer100 example from EMA - connecting directly to the Provider and it appeared to work fine.
If you are connecting via an ADH/ADS etc that should also work fine.
0
Answers
-
Hello @umer.nalla,
Related to your reply about doing a basic testing, would it be possible if you can provide a code snippet or direct me to a documentation on how you did your testing so I can verify as well on my side?
Please assist us on this matter. Thanks.0 -
Thanks for your answer,
Currently I'm config EMA consumer to connect to EMA Provider localhost:14002 like this.
OmmConsumerConfig config = EmaFactory.createOmmConsumerConfig();
consumer = EmaFactory.createOmmConsumer(config.host("localhost:14002").username("user"));
ReqMsg reqMsg = EmaFactory.createReqMsg();
consumer.registerClient(reqMsg.serviceName("DIRECT_FEED").name("IBM.N"), appClient);
Thread.sleep(60000); // API calls onRefreshMsg(), onUpdateMsg() and onStatusMsg()So does it have another config if I want to connect with RFA Provider ??
And Current RFA provider is writen by C++, and Consumer is written by Java. Can They work ?
Thanks.
0 -
Hi @support6
I compiled and ran StarterProvider_Interactive and configured it using the attached config files
StarterProvider_Interactive.cfg.txt
Renamed to .txt for upload.
The key changes to the above were to change the port to 14006 in the ExampleRFA.cfg(I am already using 14002 locally for something else) and change the service name to RFA_FEED in the application cfg file(already using DIRECT_FEED locally).
Note that I also had to modify the Provider code to read the .cfg files rather than the Registry (which is the default on Windows builds).
I then modified my EMA C++ Examples\Training\Consumer\100_Series\100_MP_Streaming\Consumer.cpp file as follows:
int main( int argc, char* argv[] )
{
try {
AppClient client;
OmmConsumer consumer( OmmConsumerConfig().host( "localhost:14006" ).username( "user" ) );
consumer.registerClient( ReqMsg().serviceName( "RFA_FEED" ).name( "ESZ1m" ), client );
sleep( 600000 ); // API calls onRefreshMsg(), onUpdateMsg(), or onStatusMsg()
} catch ( const OmmException& excp ) {
cout << excp << endl;
}
return 0;
}and then started up the RFA IProvider exe, followed by the Cons100.exe
The Cons100 was successfully able to request the dummy RIC ESZ1m from RFA_FEED on port 14006.
0 -
I have not tried EMA Java to RFA C++ - but it should work. I will try and let you know
0 -
I should mention that you would need to change your service name from DIRECT_FEED to whatever service name your Provider is publishing with and likewise the port to whatever the provider is listening on (if different from 14002).
The above snippet also assumes that your provider can fulfil an IBM.N request (the StarterProvider_Interactive example should accept any RIC)
0 -
Hi @support6 and @thanhqlptit96
I just ran up the EMA Java Viewer example connecting to my RFA Provider on localhost and it was able to consume RICs from RFA_FEED
0 -
Thanks, I know, But I saw my Log:
Dec 09, 2021 7:40:49 PM com.refinitiv.ema.access.ChannelCallbackClient reactorChannelEventCallback
SEVERE: loggerMsg
ClientName: ChannelCallbackClient
Severity: Error
Text: Received ChannelDown event on channel Channel_1
Instance Name Consumer_1_1
RsslReactor @40238dd0
RsslChannel @7a1a3478
Error Id 0
Internal sysError 0
Error Location Reactor.processWorkerEvent
Error text Error - exceeded initialization timeout (5 s)
loggerMsgEnd
It means Cannot login to Provider, right ?
0 -
I don't see why the above would not work.
Do you see any dictionary related warnings or error messages?
I did configure my EMA Java viewer example to use local dictionary files..
To do this for the Cons 100 example you can change the EMAConfig.xml to use Dictionary_2 (which in the default version of the EMAConfig.xml is for local dictionary files in the same working directory).
<DefaultConsumer value="Consumer_1"/>
<ConsumerList>
<Consumer>
<!-- Name is mandatory -->
<Name value="Consumer_1"/>
<!-- Channel is optional: defaulted to "RSSL_SOCKET + localhost + 14002"-->
<!-- Channel or ChannelSet may be specified-->
<Channel value="Channel_1"/>
<!-- Dictionary is optional: defaulted to "ChannelDictionary" -->
<Dictionary value="Dictionary_2"/>
<XmlTraceToStdout value="0"/>
</Consumer>You will then need to ensure the dictionary files are available in the working folder.
If you are using the Gradle commands to execute runConsumer100 - then this should take care of copying the dictionary files into the same folder e.g. RTSDK-JAVA\Java\Ema\Examples - but you should double check.0 -
@umer.nalla,Hi
Thanks for your support.
I checked that because my existed Provider server have configured security firewall so I cannot to server.
0 -
I was also able to get the EMA examples working with ChannelDictionary by testing with the more comprehensive Provider_Interactive RFA example - so I suspect there is some limitation in the Starter example which does not interact well with an EMA Consumer Login attempt.
If you continue to see issues, I would recommend enabling low-level trace in your RFA and EMA application to see what is going on at the wire level:
# for RFA config
\Connections\Connection_OMMProv\traceMsgToFile = true
\Connections\Connection_OMMProv\traceMsgDomains = "all"
# for EMA JAva
<Channel value="Channel_1"/>
<Dictionary value="Dictionary_1"/>
<XmlTraceToStdout value="1"/>
... and so onThis may help shed some light on why they are not talking to each other well.
0
Categories
- All Categories
- 3 Polls
- 6 AHS
- 36 Alpha
- 166 App Studio
- 6 Block Chain
- 4 Bot Platform
- 18 Connected Risk APIs
- 47 Data Fusion
- 34 Data Model Discovery
- 685 Datastream
- 1.4K DSS
- 615 Eikon COM
- 5.2K Eikon Data APIs
- 10 Electronic Trading
- Generic FIX
- 7 Local Bank Node API
- 3 Trading API
- 2.9K Elektron
- 1.4K EMA
- 251 ETA
- 556 WebSocket API
- 38 FX Venues
- 14 FX Market Data
- 1 FX Post Trade
- 1 FX Trading - Matching
- 12 FX Trading – RFQ Maker
- 5 Intelligent Tagging
- 2 Legal One
- 23 Messenger Bot
- 3 Messenger Side by Side
- 9 ONESOURCE
- 7 Indirect Tax
- 60 Open Calais
- 275 Open PermID
- 44 Entity Search
- 2 Org ID
- 1 PAM
- PAM - Logging
- 6 Product Insight
- Project Tracking
- ProView
- ProView Internal
- 22 RDMS
- 1.9K Refinitiv Data Platform
- 650 Refinitiv Data Platform Libraries
- 4 LSEG Due Diligence
- LSEG Due Diligence Portal API
- 4 Refinitiv Due Dilligence Centre
- Rose's Space
- 1.2K Screening
- 18 Qual-ID API
- 13 Screening Deployed
- 23 Screening Online
- 12 World-Check Customer Risk Screener
- 1K World-Check One
- 46 World-Check One Zero Footprint
- 45 Side by Side Integration API
- 2 Test Space
- 3 Thomson One Smart
- 10 TR Knowledge Graph
- 151 Transactions
- 143 REDI API
- 1.8K TREP APIs
- 4 CAT
- 27 DACS Station
- 121 Open DACS
- 1.1K RFA
- 104 UPA
- 193 TREP Infrastructure
- 228 TRKD
- 917 TRTH
- 5 Velocity Analytics
- 9 Wealth Management Web Services
- 90 Workspace SDK
- 11 Element Framework
- 5 Grid
- 18 World-Check Data File
- 1 Yield Book Analytics
- 46 中文论坛