question

Upvotes
Accepted
1 0 0 0

Multiple services with the same name

I'm using the RTS ETA API to build a consumer application. When processing a Directory Refresh/Update is it possible to receive information for services with the same name but different service id's?

If there are multiple services with the same name present, how should they be used?
Should services be used in a round-robin fashion, or should they be used one at a time?

#technologyeta-api
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.

Hello @steven.nuzum

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query?


If so please can you click the 'Accept' text next to the appropriate reply? This will guide all community members who have a similar question.

Thanks,


AHS

@steven.nuzum

Hi,

Please be informed that a reply has been verified as correct in answering the question, and marked as such.

Thanks,

AHS

Upvotes
Accepted
79.3k 253 52 74

@steven.nuzum

Thank you for reaching out to us.

I assume that you are connecting to RTDS (Real-Time Distribution System). Please contact the RTDS support team directly via MyRefinitiv to verify if RTDS (ADS) can be configured to have multiple services with the same name.

Internally, ETA uses a service ID to request data. Service IDs should be unique in the retrieved service directory.

<requestMsg domainType="RSSL_DMT_MARKET_PRICE" streamId="4" containerType="RSSL_DT_NO_DATA" flags="0x44 (RSSL_RQMF_STREAMING|RSSL_RQMF_HAS_QOS)" qosDynamic="0" qosRate="1" qosTimeliness="1" dataSize="0">
    <key  flags="0x3 (RSSL_MKF_HAS_SERVICE_ID|RSSL_MKF_HAS_NAME)"  serviceId="2114" name="IBM.N"/>
    <dataBody>
    </dataBody>
</requestMsg>


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.

Upvotes
1 0 0 0

The sample Source Directory Refresh message below shows services with 1,2 and 3.

<refreshMsg domainType="RSSL_DMT_SOURCE" streamId="2" containerType="RSSL_DT_MAP" flags="0x168 (RSSL_RFMF_HAS_MSG_KEY|RSSL_RFMF_SOLICITED|RSSL_RFMF_REFRESH_COMPLETE|RSSL_RFMF_CLEAR_CACHE)" groupId="0" dataState="RSSL_DATA_OK" streamState="RSSL_STREAM_OPEN" code="RSSL_SC_NONE" text="RequestCompleted"  dataSize="588">
    <key  flags="0x8 (RSSL_MKF_HAS_FILTER)"  filter="3"/>
    <dataBody>
        <map flags="0x8 (RSSL_MPF_HAS_TOTAL_COUNT_HINT)" countHint="0" keyPrimitiveType="RSSL_DT_UINT" containerType="RSSL_DT_FILTER_LIST" >
            <mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="1" >
                <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x2 (RSSL_FTF_HAS_TOTAL_COUNT_HINT)">
                    <filterEntry id="1" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST">
                        <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
                            <elementEntry name="Name" dataType="RSSL_DT_ASCII_STRING" data="TestService1"/>
                            <elementEntry name="Capabilities" dataType="RSSL_DT_ARRAY">
                                <array itemLength="0" primitiveType="RSSL_DT_UINT">
                                    <arrayEntry data="6"/>
                                </array>
                            </elementEntry>
                            <elementEntry name="IsSource" dataType="RSSL_DT_UINT" data="1"/>
                            <elementEntry name="SupportsOutOfBandSnapshots" dataType="RSSL_DT_UINT" data="0"/>
                            <elementEntry name="AcceptingConsumerStatus" dataType="RSSL_DT_UINT" data="0"/>
                            <elementEntry name="Vendor" dataType="RSSL_DT_ASCII_STRING" data="valantic"/>
                            <elementEntry name="QoS" dataType="RSSL_DT_ARRAY">
                                <array itemLength="0" primitiveType="RSSL_DT_QOS">
                                    <arrayEntry qosDynamic="0" qosRate="1" qosTimeliness="1"/>
                                </array>
                            </elementEntry>
                        </elementList>
                    </filterEntry>
                    <filterEntry id="2" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST">
                        <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
                            <elementEntry name="ServiceState" dataType="RSSL_DT_UINT" data="1"/>
                            <elementEntry name="AcceptingRequests" dataType="RSSL_DT_UINT" data="1"/>
                        </elementList>
                    </filterEntry>
                </filterList>
            </mapEntry>
            <mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="2" >
                <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x2 (RSSL_FTF_HAS_TOTAL_COUNT_HINT)">
                    <filterEntry id="1" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST">
                        <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
                            <elementEntry name="Name" dataType="RSSL_DT_ASCII_STRING" data="TestService1"/>
                            <elementEntry name="Capabilities" dataType="RSSL_DT_ARRAY">
                                <array itemLength="0" primitiveType="RSSL_DT_UINT">
                                    <arrayEntry data="6"/>
                                </array>
                            </elementEntry>
                            <elementEntry name="IsSource" dataType="RSSL_DT_UINT" data="1"/>
                            <elementEntry name="SupportsOutOfBandSnapshots" dataType="RSSL_DT_UINT" data="0"/>
                            <elementEntry name="AcceptingConsumerStatus" dataType="RSSL_DT_UINT" data="0"/>
                            <elementEntry name="Vendor" dataType="RSSL_DT_ASCII_STRING" data="valantic"/>
                            <elementEntry name="QoS" dataType="RSSL_DT_ARRAY">
                                <array itemLength="0" primitiveType="RSSL_DT_QOS">
                                    <arrayEntry qosDynamic="0" qosRate="1" qosTimeliness="1"/>
                                </array>
                            </elementEntry>
                        </elementList>
                    </filterEntry>
                    <filterEntry id="2" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST">
                        <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
                            <elementEntry name="ServiceState" dataType="RSSL_DT_UINT" data="1"/>
                            <elementEntry name="AcceptingRequests" dataType="RSSL_DT_UINT" data="1"/>
                        </elementList>
                    </filterEntry>
                </filterList>
            </mapEntry>
            <mapEntry flags="0x0" action="RSSL_MPEA_ADD_ENTRY" key="3" >
                <filterList containerType="RSSL_DT_ELEMENT_LIST" countHint="0" flags="0x2 (RSSL_FTF_HAS_TOTAL_COUNT_HINT)">
                    <filterEntry id="1" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST">
                        <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
                            <elementEntry name="Name" dataType="RSSL_DT_ASCII_STRING" data="TestService3"/>
                            <elementEntry name="Capabilities" dataType="RSSL_DT_ARRAY">
                                <array itemLength="0" primitiveType="RSSL_DT_UINT">
                                    <arrayEntry data="6"/>
                                </array>
                            </elementEntry>
                            <elementEntry name="IsSource" dataType="RSSL_DT_UINT" data="1"/>
                            <elementEntry name="SupportsOutOfBandSnapshots" dataType="RSSL_DT_UINT" data="0"/>
                            <elementEntry name="AcceptingConsumerStatus" dataType="RSSL_DT_UINT" data="0"/>
                            <elementEntry name="Vendor" dataType="RSSL_DT_ASCII_STRING" data="valantic"/>
                            <elementEntry name="QoS" dataType="RSSL_DT_ARRAY">
                                <array itemLength="0" primitiveType="RSSL_DT_QOS">
                                    <arrayEntry qosDynamic="0" qosRate="1" qosTimeliness="1"/>
                                </array>
                            </elementEntry>
                        </elementList>
                    </filterEntry>
                    <filterEntry id="2" action="RSSL_FTEA_SET_ENTRY" flags="0x0" containerType="RSSL_DT_ELEMENT_LIST">
                        <elementList flags="0x8 (RSSL_ELF_HAS_STANDARD_DATA)">
                            <elementEntry name="ServiceState" dataType="RSSL_DT_UINT" data="1"/>
                            <elementEntry name="AcceptingRequests" dataType="RSSL_DT_UINT" data="1"/>
                        </elementList>
                    </filterEntry>
                </filterList>
            </mapEntry>
        </map>
    </dataBody>
</refreshMsg>

Services with id 1 and 2 have the same name. Is it possible for the ETA API to receive such a message whereby there are multiple services with the same name but different id's.

We are porting an application that previously used the RFA SDK 8.2.x to ETA API. In the RFA Configuration Guide document, Appendix C1 it mentions the follow:
If the single session contains multiple connections which provide the same service, creating service aliases for the services is required. In case the application needs RFA to automatically route the connections to request the item, using a service group is required as well. See Section 0 and the example below for details.

Here, the RFA API needs special configuration where there are multiple services with the same name. It is the case that the ETA API ignores service names altogether and only relies on the service id. If this is the case, it then up to the application then to decide how the services with the same name are used, whether it be serial, parallel or round-robin.

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.

Upvotes
79.3k 253 52 74

@steven.nuzum

ETA is a low level and high performance API. Typically, it provides the transport API to send and receive messageas and the message API to encode and decode messages.

Therefore, if you used ETA directly without the ValueAdded libraries, the application will retrieve that source directory message. Then, the application needs to choose the service for item subscriptions.

First, it is better to contact the RTDS support team directly via MyRefinitiv to verify if it is valid for the server to provide the same service name with different service IDs.

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.