How to fetch multiple Symbols data by making one call for EMA?(Ex : Sym1,Sym2,Sym3....)is it correct

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);?

Best Answer

  • 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:

    image

    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

Answers

  • @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.

  • 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.

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

  • Hello @priyanka.mundargi

    The "state="Closed / Suspect / None / 'Login
    stream was closed.' is shown when consumer.uninitialize(); is called after 60,000 milliseconds/60 seconds. According to the EMA Java example source code in example370__MarketPrice__Batch:

    image

    consumer.uninitialize() is to close the login stream(log out) that's why you see this state.

    To continue receiving data, just change 60000 millisecond in
    Thread.sleep(60000); to be your favorite time.

  • Hello @priyanka.mundargi

    If you have a new question, please post it to be a new one in the

    https://community.developers.refinitiv.com/questions/ask.html

    This will allow everyone can see your question obviously and can post the answer to help you.

  • 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:

    image