question

Upvotes
Accepted
5 1 1 2

RFA to subscribe more than one RIC

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.


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

1 Answer

· Write an Answer
Upvotes
Accepted
78.2k 246 52 72

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

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.

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

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