question

Upvotes
Accepted
9 2 2 2

How to fetch multiple Symbols data by making one call for EMA?(Ex : Sym1,Sym2,Sym3....)is it correct way: consumer.registerClient(reqMsg.serviceName("ABC").name("Sym1,Sym2,Sym3"), appClient);?

elektronrefinitiv-realtimeelektron-sdkrrtema-apielektron-message-apisymbology
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Upvote
Accepted
9.5k 10 5 7

Hello @priyanka.mundargi

An EMA consumer application can request multiple items using a single request called a batch request. After the consumer sends an batch request to the ADS, the ADS responds by sending the items as if they were opened individually so the items can be managed individually as shown in the figure below:

Hence, your EMA application just once calls OmmConsumer.registerClient(..) specifying array of multiple Symbols.

A snipped source code in EMA Java:

ElementList batch = EmaFactory.createElementList();
OmmArray array = EmaFactory.createOmmArray();                           


array.add(EmaFactory.createOmmArrayEntry().ascii("TRI.N"));
array.add(EmaFactory.createOmmArrayEntry().ascii("IBM.N"));

batch.add(EmaFactory.createElementEntry().array(EmaRdm.ENAME_BATCH_ITEM_LIST,
array));
consumer.registerClient(EmaFactory.createReqMsg().serviceName("DIRECT_FEED").payload(batch),
appClient);

For the complete application source code shipped with Elektron Java SDK package, it is <Elektron Java SDK package>\Ema\Src\examples\java\com\thomsonreuters\ema\examples\training\consumer\series300\example370__MarketPrice__Batch.

A snipped source code in EMA C++:

UInt64 handle = consumer.registerClient( ReqMsg().serviceName( "DIRECT_FEED" ).payload( ElementList().addArray( ENAME_BATCH_ITEM_LIST, OmmArray().addAscii( "TRI.N" ).addAscii( "IBM.N" ).complete() ).complete() ), client );

For the complete application source code shipped with Elektron C++ SDK package, it is

<Elektron C++ SDK package>\Ema\Examples\Training\Consumer\300_Series_Examples\370__MarketPrice__Batch


batch.png (23.3 KiB)
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Am getting below in logs "state="Closed / Suspect / None / 'Login stream was closed.'

What if i need continous data?

Hello @priyanka.mundargi

What EMA edition that you are using? Is it C++ or Java?

Did the log above was shown after the application received data?

Yes. that is right.

Show more comments

Why are we reading Symbol as Ascii?is it always ascii?using array.add(EmaFactory.createOmmArrayEntry().ascii("TRI.N"));

Hello @priyanka.mundargi

This is the specification of batch request that the ItemList must be an array of ASCII as shown in <Elektron Java SDK package>\Ema\Docs\EMAJ_RDMUsageGuide.pdf at section A.2 ItemList:

Upvote
1.9k 7 9 16

@priyanka.mundargi, EMA doesn't support that comma separated items because OMMConsumer threats a name value of a ReqMsg object as an individual single item. So, you should use a loop to help explicitly iterate calling the registerClient() method for each item.

For example:

// Single item call
ReqMsg reqMsg = EmaFactory.createReqMsg();
consumer.registerClient(reqMsg.domainType(EmaRdm.MMT_MARKET_PRICE).serviceName("DIRECT_FEED").name("JPY="), client);

// Multiple items call
String[] items = {"JPY=", "THB=", "EUR="};

ReqMsg reqMsg = EmaFactory.createReqMsg();
for (String item:items) {
    consumer.registerClient(reqMsg.clear().reqMsg.domainType(EmaRdm.MMT_MARKET_PRICE).serviceName("DIRECT_FEED").name(item), client);
}

Hope this helps.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.