RFA to subscribe more than one RIC

Options

Hi,

I am studying the Java version of RFA tutorial.

When I tried to subscribe 2 RIC (say A and B), I find it successfully returned update messages of both RIC.


But I only see the messages showed the RIC name in the "REFRESH_RESP" (it should be the first full set of data?), but not in the "UPDATE_RESP" as below:

================================

Msg Type: MsgType.REFRESH_RESP

Msg Model Type: MARKET_PRICE

...

Name: EURCAD=

NameType: 1 (RIC)

Payload: 2029 bytes

================================

Msg Type: MsgType.UPDATE_RESP

Msg Model Type: MARKET_PRICE

Indication Flags: DO_NOT_CONFLATE

Hint Flags: HAS_RESP_TYPE_NUM | HAS_SEQ_NUM

...

RespTypeNum: 0 (UNSPECIFIED)

Payload: 223 bytes

================================

So, when the data keep going in "UPDATE_RESP", how do I know if the message is an update for RIC A or RIC B?


Thanks for help.


Tagged:

Best Answer

  • Jirapongse
    Jirapongse ✭✭✭✭✭
    Answer ✓

    @ChunBongLee

    RFA Java uses handles to uniquely identify subscribed items.

    You can get a handle of an item from the registerClient method when subscribing to an item.

    Handle itemHandle = _mainApp.getOMMConsumer().registerClient(_mainApp.getEventQueue(),
    ommItemIntSpec, this, null);


    _itemHandles.add(itemHandle);

    You can also get a handle of an item from the event.getHandle() in the processEvent callback function when using batch requests. For more information, please refer to the com.reuters.rfa.example.omm.batchviewcons example in the RFA package.

        public void processEvent(Event event)
        {
            if (event.getType() == Event.COMPLETION_EVENT)
            {
                System.out.println(_className + ": Receive a COMPLETION_EVENT, " + event.getHandle());
                _itemHandles.remove(event.getHandle()); // update the handle list
                return;
            }

    Therefore, the application needs to maintain a map of handles and item names.

    Otherwise, if you would like to get the RIC name in the update messages, you can set the OMMMsg.Indication.ATTRIB_INFO_IN_UPDATES in the OMM request message, as shown below.

      if (CommandLine.booleanVariable("attribInfoInUpdates"))
                ommmsg.setIndicationFlags(OMMMsg.Indication.REFRESH | OMMMsg.Indication.ATTRIB_INFO_IN_UPDATES);
            else
                ommmsg.setIndicationFlags(OMMMsg.Indication.REFRESH);

    With this flag, update messages will have associated RIC names.

        Msg Type: MsgType.UPDATE_RESP
        Msg Model Type: MARKET_PRICE
        Indication Flags: DO_NOT_CONFLATE
        Hint Flags: HAS_ATTRIB_INFO | HAS_RESP_TYPE_NUM | HAS_SEQ_NUM
        SeqNum: 46206
        RespTypeNum: 0 (UNSPECIFIED)
        AttribInfo
            ServiceName: ELEKTRON_DD
            ServiceId: 10002
            Name: JPY=
    NameType: 1 (RIC)

        Payload: 13 bytes
            FIELD_LIST
                FIELD_ENTRY 114/BID_NET_CH: -0.88
                FIELD_ENTRY 372/IRGPRC: -0.65

    However, RFA Java is a legacy API. If you would like to start developing a new application, I suggest using Refinitiv Real-Time SDK - Java (EMA Java) instead. The Enterprise Message API (EMA) is an open-source, data-neutral, multi-threaded, ease-of-use API providing access to OMM and RWF data. It is able to retrieve the same content as RFA Java.