RFA C++ 8.x does not support GCC 5.x.
It supports GCC 4.x on Oracle Linux and RHEL 6&7. Please find Compiler and Supported OS from API Compatibility Matrix locates under the following folder
https://developers.refinitiv.com/elektron/elektron-sdk-cc/docs?content=5403&type=documentation_item
You can download the latest version of RFA C++ from
You can also find the RFA C++ Developer guide and other documents under folder Docs.
Anyway if you plan to develop a new application, I would suggest you use Elektron SDK C++ instead.
@moragodkrit thank you for your reply.
What is the difference between RFA C++ library vs Elektron SDK C++?
Will Elektron SDK C++ with MAPI?
I've been working with Hank Manson (hank.manson@refinitiv.com) and we just completed the Matching API (MAPI) conformance testing. Now I need market data feeds to trade on the MAPI session.
Thanks
Bill Lee
973-886-9409 (New York), blee@lucera.com
@moragodkrit on the spreadsheet I don't GCC 5.x supported. I only see GCC 4.x and GCC 7.4 supported for RFA C++.
Since my compiler is GCC 5.2, can I still use RFA C++ 8.1?
@moragodkrit I am developing on CentOS Linux 7 which according to the spreadsheet says to use RFA C++ 8.1 but I can not really tell based on the my compiler version of gcc 5.2. thanks
@moragodkrit Hi moragodkrit
I downloaded rfa8.1.2.L1.linux.rrg.tar.gz but I only see these libraries in the tarball.
drwxr-xr-x 3 blee blee 4096 Apr 3 18:06 RHEL6_32_GCC444
drwxr-xr-x 3 blee blee 4096 Apr 3 18:06 RHEL6_64_GCC444
drwxr-xr-x 3 blee blee 4096 Apr 3 18:06 OL7_64_GCC482
I was expecting a library for CentOS.7.0-64 bit OS which is my Linux Operating System. Any idea which library should I use?
According to the spreadsheet APICompatibilityMatrix_2020.3_3.xlsx , only RFA C++ 8.1 (newer) (OMM & 64 bits) is supported for .
Hello @blee,
Please review this previous discussion of EMA vs RFA. So for a new application, EMA should be your choice, whenever at all possible.
If you are going to still go with RFA, please make sure to select the latest version available via Software Downaloads from my.refinitiv.com, at present I see 8.1.2.L1, so that you can benefit from all the available fixes.
On Centos 7, 64 bit, I would go with OL7, 64 bit. Per google "CentOS is a re-build of RHEL without the Red Hat branding. Oracle is a rebuild of RHEL with an optional altnerative kernel. Usually, for practical purposes, RHEL, CentOS and Oracle Linux are the same. They all share the same source code and very few configuration differences. "
Hope this help
@zoya.farberov thank you for your reply. I will look into EMA vs RFA. I already certified with Matching API (MAPI) for trading. I was told specifically to use RFA to get market data. Will EMA allow me to subscribe to market data and then use those price to trade in MAPI? thanks
Hi @blee,
I am not familiar with MAPI. Here is what I can tell:
You can definitely consume market data (OMM/RSSL formatted) using EMA.
According to Matching API Guide on my.refiinitiv, Chapter 1 intro:
"Price discovery via API
UPA is a supported mechanism in addition to RFA. UPA is previous name for ETA API that is part of Elektron API suite, same as EMA. EMA is an ease of use tier on top of ETA. Therefore, ETA is a supported option and EMA, in my understanding, should be a supported option as well, but less coding for you, compared to either RFA C++ or ETA C++.
@zoya.farberov
Can you help debug the Login message?
My consumer client is based on the C++ RFA download in rfa8.1.2.L1.linux.rrg/Setup/rfa8.1.2.L1.linux.rrg/Examples/StarterConsumer.
I sent a Login message using the following function but I am not getting a reply back.
A support person for RFA sent me this error message.
There seems to be an issue with the “Opaque data” in the REFRESH message to your logon REQUEST message. However, I don’t know what that is. This is the first time I’ve ever heard the term. Here is what the REFRESH message looks like:
==================================================
bool
RFAConsumer::
sendLoginRequest()
{
OMMItemIntSpec ommItemIntSpec;
ReqMsg reqMsg;
AttribInfo attribInfo;
reqMsg.setMsgModelType(MMT_LOGIN);
reqMsg.setInteractionType(ReqMsg::InitialImageFlag | ReqMsg::InterestAfterRefreshFlag);
attribInfo.setNameType(USER_NAME);
attribInfo.setName(_cfgVars.userName);
ElementList elementList;
ElementEntry element;
DataBuffer elementData;
ElementListWriteIterator elwiter;
elwiter.start(elementList);
element.setName(ENAME_APP_ID);
elementData.setFromString(_cfgVars.appId, DataBuffer::StringAsciiEnum);
element.setData(elementData);
elwiter.bind(element);
element.setName(ENAME_POSITION);
elementData.setFromString(_cfgVars.position, DataBuffer::StringAsciiEnum);
element.setData(elementData);
elwiter.bind(element);
elwiter.complete();
attribInfo.setAttrib(elementList);
reqMsg.setAttribInfo(attribInfo);
ommItemIntSpec.setMsg(&reqMsg);
_pLoginHandle = _pOMMConsumer->registerClient(_pEventQueue, &ommItemIntSpec, *this, NULL);
if(!_pLoginHandle)
return false;
return true;
}
the function uses config values from below. This config is also supplied by the sample program but I updated the userName and itemName.
userName is the token and itemName is the ccy.
\appId = "256"
\enumDictionaryFilename = "./enumtype.def"
\fieldDictionaryFilename = "./RDMFieldDictionary"
# position to be used for Login
# According to the RDM usage guide: If the server is authenticating with DACS, the consumer application might be required to pass in a valid position.
# ip addr/hostname or ip addr/net
# \position = "<IP Address/hostname>"
\runTimeInSeconds = 0
\service = "DIRECT_FEED"
\session = "Session1"
\userName = "f2e43e37-76cd-4e66-8528-85921fcf25fe"
\itemName = "EUR/USD"
Hello @blee,
You will need to configure RFA correctly according to your assigned infrastructure endpoint and credentials.
Quickstart and RFA Cinfig Tutorial cover how to do this, and are the best place to get started.
---
In brief:
StarterConsumer example uses two configs, ExampleRFA.cfg and StarterConsumer.cfg
ExampleRFA you would point at your infra in the actively used session,
StarterConsumer config will name the session to be used (Session1 ?), service to be used, and user.
What is your infrastructure type, are you connecting to EaaS, deployed TREP, Electron Connect, ERT?
DIRECT_FEED is an example placeholder service name. It needs to be replaced with a valid service name. User looks invalid as well, please verify and use correct configuration for your endpoint and user.
Login will not work, unless configs are correct.
Hope this helps
@zoya.farberov
I am using both config files, ExampleRFA.cfg and StarterConsumer.cfg. This IP and port are taken from MATCHING API - Thomson Reuters Matching Host to Go Guide
\Connections\Connection_RSSL\connectionType = "RSSL"
\Connections\Connection_RSSL\rsslPort = "60239"
\Connections\Connection_RSSL\hostName = "159.220.63.15"
I've the ip and port configured correctly. Someone has already confirmed the connection state is UP.
I was told I am connecting to P2PS which is a part Matching API platform.
User is a token which retrieve from the FIX MAPI trading session.
I wish I can attached some documents here so you can a better understanding. Can you email me back at blee@lucera.com so I can send you documents.
Thanks
Here is my complete config files.
============RFAConsumer.cfg
\appId = "256"
\enumDictionaryFilename = "./enumtype.def"
\fieldDictionaryFilename = "./RDMFieldDictionary"
# position to be used for Login
# According to the RDM usage guide: If the server is authenticating with DACS, the consumer application might be required to pass in a valid position.
# ip addr/hostname or ip addr/net
# \position = "<IP Address/hostname>"
\runTimeInSeconds = 0
\service = "DIRECT_FEED"
\session = "Session1"
\userName = "f2e43e37-76cd-4e66-8528-85921fcf25fe"
\itemName = "EUR/USD"
============CommonRFA.cfg
\Sessions\Session1\connectionList = "Connection_RSSL"
\Connections\Connection_RSSL\connectionType = "RSSL"
\Connections\Connection_RSSL\rsslPort = "60239"
\Connections\Connection_RSSL\hostName = "159.220.63.15"
\Logger\AppLogger\windowsLoggerEnabled = false
\Logger\AppLogger\fileLoggerEnabled = true
\Logger\ComponentLoggers\Connections\messageFile = "RFA8_Connections"
\Logger\ComponentLoggers\Adapter\messageFile = "RFA8_Adapter"
\Logger\ComponentLoggers\SessionCore\messageFile = "RFA8_SessionLayer"
\Logger\ComponentLoggers\RSSL_Adapter\messageFile = "RFA8_RSSL_Adapter"
\Logger\ComponentLoggers\RSSL_Cons_Adapter\messageFile = "RFA8_RSSL_Cons_Adapter"
\Logger\ComponentLoggers\RSSL_Prov_Adapter\messageFile = "RFA8_RSSL_Prov_Adapter"
\Logger\ComponentLoggers\Static\messageFile = "RFA8_MsgFile"
Is this a standard StarterConsumer that came with RFA SDK 8.0 or different?
CommonRFA.cfg looks correct, although by default, StarterConsumer example does not use CommonRFA.cfg, in code, it refers to "./ExampleRFA.cfg", please verify in code you run?
StarterConsumer example also uses StarterConsumer.cfg, please verify in code.
Please confirm with your account team what service name you are assigned ( if it is DIRECT_FEED or otherwise) and your assigned user.
There are two connections for matching API, market data and FIX. These are the service and user for your market data connection, OMM/RSSL, not for your FIX connection.
yes, StarterConsumer that came with RFA SDK 8.0 in this zip file. rfa8.1.2.L1.linux.rrg.
I renamed ExampleRFA.cfg to CommonRFA.cfg and also updated the code. the configs loaded fine.
I will check with my account team for the service name.
But the user name is the token I received from the FIX MAPI trading session. Have you deal the token before? That's why I want to send you some Reuters MAPI document so you can better understand what I am talking about.
here is the rfa.log which shows connection state is up.
[Thu Apr 9 17:02:40 2020]: (ComponentName) RSSL_Adapter: (Severity) Information: RSSL channel on connection "Default::Connection_RSSL 159.220.63.15:60239" has negotiated ping timeout set to: 15000
[Thu Apr 9 17:02:40 2020]: (ComponentName) RSSL_Cons_Adapter: (Severity) Information: Connection Status Changed, RSSL_Cons_Connection "Default::Connection_RSSL 159.220.63.15:60239" State: "Up" StatusCode: "None" StatusText: Connection up
[Thu Apr 9 17:02:40 2020]: (ComponentName) SessionCore: (Severity) Warning: Connection "Connection_RSSL" does not support views. View requests will be converted to full item requests for this connection.
[Thu Apr 9 17:02:40 2020]: (ComponentName) SessionCore: (Severity) Warning: Connection "Connection_RSSL" does not support Pause/Resume. Pause and Resume requests for this connection will be ignored.
[Thu Apr 9 17:02:40 2020]: (ComponentName) SessionCore: (Severity) Warning: Connection "Connection_RSSL" does not support optimized Pause/Resume. Optimized Pause/Resume requests will be converted to individual item Pause/Resume requests for this connection.
Hello @blee,
please send to zoya.farberov@refinitiv.com
I have not dealt with Matching before. But the user has to be your individual assigned user, not the same for all. So usually found in welcome letter, not in Guide.
---
From the log, the first step, the connection is established, therefore ExampleRFA.cfg proven valid.
Next step, StarterConsumer.cfg, login relies on valid user, this does not look to be correct
And the last step, subscription, requires valid service and RIC. "EUR/USD" for example, is not a valid RIC.
To find out more, would enable RFA tracing. Add the below and restart
\Connections\Connection_RSSL\traceMsgToFile = true \Connections\Connection_RSSL\traceMsgDomains = "all" \Connections\Connection_RSSL\traceMsgMaxMsgSize = 5000000 \Connections\Connection_RSSL\traceMsgMultipleFiles = true \Connections\Connection_RSSL\tracePing = true
check the file in the folder after a bit of wait.
here is section from
THOMSON REUTERS MATCHING DATA FEED DIRECT USER GUIDE
I see the guide THOMSON REUTERS MATCHING DATA FEED DIRECT USER GUIDE
I copy what you are saying about user obtained from FIX:
"This is the value retrieved from the Text(58) tag of the FIX Login (35=A) response."
Also says:
ApplicationId 174,
StarterConsumer, by default uses 256
Position is IP/Net
Please try to follow, but also it appears that tracing login request and response would be useful.
@zoya.farberov
Service name is not used in the Login message. It is only used in the subscription request message.
I still have not gotten a reply back from the Login message.
Please contact MAPI support team via
https://transactions.thomsonreuters.com/
MAPI has its own dedicated support channel. The API is a wrapper class builds on top of RFA. As far as I understand, it requires their own authentication server with infrastructure to login and sends/receive a message.
You can also check with the MAPI support team if they have any plans to support ESDK.
@moragodkrit
I'm working with a MAPI support in https://transactions.thomsonreuters.com/. His name is Hank Manson. I already completed the conformance testing with him on FIX MAPI Trading. Unfortunately, he only mainly supports MAPI Trading session using FIX. For the RFA debugging and development questions, he asked me to check in RDC forum. That's why I am here now.
Hank has never heard/worked with EMA or ESDK. He only works with clients using RFA API for market data in MAPI and the FIX MAPI Trading API.
The specs I received from him are
1. THOMSON REUTERS MATCHING DATA FEED DIRECT USER GUIDE (RFA C++)
2. THOMSON REUTERS MATCHING FIX INTERFACE USER GUIDE (FIX Protocol)
But from your latest post, it seems to be a question regarding how to use RFA to login to the Matching Data Feed server, which should be answered by the MAPI team. I'm curious why Hank Manson suggests you ask the question with Dev forum. As far as I understand the team should be able to provide you a sample app with steps to call API codes to send log in to the server and get the data. Also, if you have a sample consumer app provided by the MAPI team, you can also turn on the RSSL trace while running the application so you can see the login request message and the response message from the server.
I do not have access to the Matching Data feed server so that what I can help is just providing the suggestion for setting values in RFA codes. If you need to pass the token in a Login request, you may try to change Login AttributInfo.NameType to use Token according to RDMUsageGuide.pdf provides in RFA C++ Development Kit.
Hello all and @blee,
Let me update on RFA part of the question only:
Subsequent to the review of Matching Data Feed Direct User Guide, a couple of updates were made by Bill (@blee) for the purposes of testing, including service and itemName in StarterConsumer config, model changed to MarketByPrice and the last update was:
"...using MMT_MARKET_BY_PRICE fixes the problem", resulting in streaming data seen.
It appears that the next steps in the integration will be MAPI-specific.
@zoya.farberov @moragodkrit Thank you for your help.
I got market data updates on Friday by using MMT_MARKET_BY_PRICE as suggested by Zoya.
However, this morning I got this error now. Any idea?
2020 Apr 13 12:46:10.363 ST GMT-05:00 7D85 AFA77740 537 TRACE <- Received MMT_LOGIN Status - Login Accepted
streamState : Open
dataState : Ok
statusCode : None
statusText : Login accepted by host ld4p-hd3scad02a..
2020 Apr 13 12:46:10.504 ST GMT-05:00 7D85 AFA77740 594 TRACE <- Received MMT_MARKET_BY_PRICE Status EUR=
serviceName : TRFX_MDFD_Standard
symbolName : EUR=
streamState : Closed
dataState : Suspect
statusCode : NotAuthorized
statusText : A21: DACS User Profile denied access to vendor
.
I am using this config. This is the same as Friday except I updated the userName(token). I have to use a new token for beginning of each week which I got it from the FIX session.
\appId = "174"
\enumDictionaryFilename = "./enumtype.def"
\fieldDictionaryFilename = "./RDMFieldDictionary"
# position to be used for Login
# According to the RDM usage guide: If the server is authenticating with DACS, the consumer application might be required to pass in a valid position.
# ip addr/hostname or ip addr/net
# \position = "<IP Address/hostname>"
\runTimeInSeconds = 0
\service = "TRFX_MDFD_Standard"
\session = "Session1"
\userName = "4dbb8a1d-5d84-4f44-a89e-b93723b120c3"
\itemName = "EUR="
Hi @blee,
It's better to post a new question as a separate new question, so that it is visible as question and not as one of the answers.
You can always include a link to the previous related question for reference.
Hi @blee,
Please check that the user credential, that is supplied into StarterConsumer, is correct, maybe it makes sense to remove it, re-copy, re-paste, and re-try the example?
If this does not help, please verify the credential is valid with MAP support.