Running Elektron-SDK's C++ Example Step5 : 'Service name of 'LDN_RSSL_DDS_CHE' is not found.'
Hello,
STEP1
----------
we installed and configured software named "EZD 1.2" on a computer with Windows Server 2008 R2 Standard operation system. Then we run in command line:
ezd.eze -nodaemon
and we can see the window
STEP2
---------
we downloaded
Elektron SDK - C/C++ - 1.1.0 - Windows
and the examples from https://developers.thomsonreuters.com/system/files/EMA Tutorials.zip
Since we are interested in downloading and decoding machine readable news we took the example #5 (MRNConsumer) and changed just one line according to our configuration
OmmConsumer consumer(OmmConsumerConfig().host("my.ip.goes.here:14002").username("my_user_goes_here"));
in the following code
int main( int argc, char* argv[] )
{
try {
AppClient client;
// Create consumer and specify our connectivity parameters + user name
OmmConsumer consumer(OmmConsumerConfig().host("my.ip.goes.here:14002").username("my_user_goes_here"));
// Request NTA domain MRN_STORY type items
consumer.registerClient(ReqMsg().serviceName("LDN_RSSL_DDS_CHE").name("MRN_STORY").domainType(MMT_NEWS_TEXT_ANALYTICS), client); // original
//consumer.registerClient(ReqMsg().serviceName("DIRECT_FEED").name("IBM.N").domainType(MMT_NEWS_TEXT_ANALYTICS), client); // original
// Sleep long enough to receive a few stories
sleep( 60000 );// API calls onRefreshMsg(), onUpdateMsg() and onStatusMsg()
} catch ( const OmmException& excp ) {
cout << excp << endl;
}
return 0;
}
PROBLEM
---------------
When we run MRNConsumer.exe we have the following error in output:
QUESTION
----------------
We'd like to download and decode machine readable news, what's wrong in our code?
Thanks in advance
Find more posts tagged with
- Global news that every user receive
- Your user is not setup properly
- Or it is test user
You are now subscribing to a valid service, permissioned to your user.
This error means you are not permissioned for item IBM.N from ELEKTRON_DD, that you are trying to subscribe to.
What item set have you purchased/are you permissioned for?
If it's MRN news, then RIC, or item, should be MRN_STORY. I do not think interestAfterRefresh = false can be right, as the nature of the news is to be continuously refreshing. Please refer to MRN tutorial for an example of MRN subscription request and response parsing.
If you are not sure what items you are permissioned for, please check with your TR account team.
Maybe our contract doesn't allow us to see "IBM.N" data, so I changed again the source code:
consumer.registerClient(ReqMsg().serviceName("ELEKTRON_DD").name("GASI.MI").interestAfterRefresh(false), client);
Now I'm trying to get "GASI.MI". Another error:
REFRESH Item Name: GASI.MI
Service Name: ELEKTRON_DD
Item State: Non-streaming / Ok / None / 'All is well'
Wrong Domain and/or Payload 6 132
Any help please?
It is because the MRNConsumer example is made for MRN news only.
If you check the onRefreshMsg callback, you will see that it has if-else cause that confirm the payload and domain type is News Text Analytics.
void AppClient::onRefreshMsg( const RefreshMsg& refreshMsg, const OmmConsumerEvent& )
{
/***
***/
// Confirm the payload and domain type and dump the metadata Fields to the console
if (DataType::FieldListEnum == refreshMsg.getPayload().getDataType() && (MMT_NEWS_TEXT_ANALYTICS == refreshMsg.getDomainType()))
decode(refreshMsg.getPayload().getFieldList());
else
cerr << endl << "Wrong Domain and/or Payload " << refreshMsg.getDomainType() << " " << refreshMsg.getPayload().getDataType() << endl;
}
Could you try using this request?
consumer.registerClient(ReqMsg().serviceName("ELEKTRON_DD").name("MRN_STORY").domainType(MMT_NEWS_TEXT_ANALYTICS), client);
Hello Warat,
thanks you for helping, I change again the code as you suggested:
consumer.registerClient(ReqMsg().serviceName("ELEKTRON_DD").name("MRN_STORY").domainType(MMT_NEWS_TEXT_ANALYTICS), client);
now we are able to receive some data, but we receive data only for some seconds, after MRNConsumer.exe quits. Is it normal?
How to avoid this?
Once you call consumer.registerClient(), EMA will create a new thread and start dispatching any message event to the callback using that new thread.
Your main thread is free to do whatever you want.
But in the example, it sleep the main thread in order to prevent it from leaving the main function.
int main( int argc, char* argv[] )
{
try {
AppClient client;
// Create consumer and specify our connectivity parameters + user name
OmmConsumer consumer( OmmConsumerConfig().consumerName("Consumer_1").host( "192.168.27.46:14002" ).username( "API.TEST" ) );
// Request NTA domain MRN_STORY type items
consumer.registerClient(ReqMsg().serviceName("ELEKTRON_DD").name("MRN_STORY").domainType(MMT_NEWS_TEXT_ANALYTICS), client);
// Sleep long enough to receive a few stories
sleep( 60000 ); // API calls onRefreshMsg(), onUpdateMsg() and onStatusMsg()
} catch ( const OmmException& excp ) {
cout << excp << endl;
}
return 0;
}
As you can see, once it sleep for 60 second, the main thread leave the main function and the application is terminated.
By the way, I would have another question.
Now we use
consumer.registerClient(ReqMsg().serviceName("ELEKTRON_DD").name("MRN_STORY").domainType(MMT_NEWS_TEXT_ANALYTICS), client);
and it gives us all the news about everything, about every possible security.
Is it possible to specify in some ways the news only about some securities (maybe specifying RIC)?
I'm asking because our contract includes only 1000 Italian securities but we receive all the news about every existing securities all over the world.
Thanks in advance.
No, I am afraid not.
The news you received depends on permission of the user you use. It is automatically handled by the server.
You will received all news story you are entitled to. And you have to filter the unwanted new out by yourself.
If you received news item you believe you are not entitled to, then it is either
You may verify this with your account manager.
Once you call consumer.registerClient(), EMA will create a new thread and start dispatching any message event to the callback using that new thread.
Your main thread is free to do whatever you want.
But in the example, it sleep the main thread in order to prevent it from leaving the main function.
int main( int argc, char* argv[] )
{
try {
AppClient client;
// Create consumer and specify our connectivity parameters + user name
OmmConsumer consumer( OmmConsumerConfig().consumerName("Consumer_1").host( "192.168.27.46:14002" ).username( "API.TEST" ) );
// Request NTA domain MRN_STORY type items
consumer.registerClient(ReqMsg().serviceName("ELEKTRON_DD").name("MRN_STORY").domainType(MMT_NEWS_TEXT_ANALYTICS), client);
// Sleep long enough to receive a few stories
sleep( 60000 ); // API calls onRefreshMsg(), onUpdateMsg() and onStatusMsg()
} catch ( const OmmException& excp ) {
cout << excp << endl;
}
return 0;
}
As you can see, once it sleep for 60 second, the main thread leave the main function and the application is terminated.
Hello @mauro.medizza,
From the error message, the service that you are requesting to subscribe MRN from is not available.
Is LDN_RSSL_DDS_CHE a valid service provided via EZD and permissioned to your site?
Suggest to try subscribing to ELEKTRON_DD, the default service for EZDs. If this service is also not available, as it is possible that you have a custom setup, please confirm with your TR account team (that licensed you for EZD) the correct permissioned service you should be using?