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
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?
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:
@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.