For a deeper look into our Elektron API, look into:

Overview |  Quickstart |  Documentation |  Downloads |  Tutorials |  Articles

question

Upvotes
Accepted
25 8 14 18

QoS issue using the WebSocket API

Hello,

We are currently trying to install and test our product (RMDTREPOMM) using the WebSocket API on a client site but unfortunately they have this error :

"No multiple qos service supports this QoS.","Code":"NoResources"

I asked them to change the QoS properties and I am waiting from them.

However, how can we know what should we use for QoS settings ? In which config file should we have a look into the local TREP infra ?

Thanks

websocketsqos
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
Accepted
25.3k 87 12 25

Hi @Henri.GARDON

Your request does not make sense - you are specifying a higher Rate for Worst -TickByTick and a lower rate for Best - JitConflated ?

My guess would be that the ADS is just ignoring the QOS as a nonsensical and therefore invalid request.

However, I am not an RTDS expert and just using logic for the above explanation

For a concrete confirmation, please raise a ticket with the RTDS team at My.Refinitiv - so they can advise on the above behaviour.

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
25.3k 87 12 25

Hi @Henri.GARDON

I have never seen that message before, nor can I find any reference to it in the documentation.

A few things which may help shed light on the issue....

Can you confirm in response to what request message you get above e.g. Login request, data item request?

Can you confirm what a typical JSON item request from your application looks like? Are you explicitly specifying QOS in your JSON requests?

Can you connect and consume data from the server using an example like - WebSocketAPI.Python.TestClient or websocket-api/market_price.py at master · Refinitiv/websocket-api (github.com)

Do you explicitly specify a service name in your JSON requests or rely on a default JSON service ID on the ADS (P2PS) i.e. *ads*defaultJsonServiceId : xxxx on the ADS cnf file?

It may also be worth requesting a source directory via the Websocket and seeing what is returned, as the response should include the QOS available for the various services.

{
  "Domain":"Source",
  "ID":3,
  "Key":{
    "Filter":1
  }
}



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
25 8 14 18

Basically, we are sending the following json :

{"Type":"Request","ID":1,"Domain":"Login","Key":{"Elements":{"Position":"1.1.1.1/net","ApplicationId":"185"},"Name":"r_msa"}}

Then

{"Type":"Request","ID":2,"Domain":"Source","Key":{"Filter":3,"Service":"IDN_RDF"}}

And finally :

{"Type":"Request",
"Qos":
{"Dynamic":true,"Rate":"JitConflated","Timeliness":"Realtime"},
"WorstQos":
{"Dynamic":true,"Rate":"JitConflated","Timeliness":"Realtime"},
"ID":3,"Domain":"MarketPrice","View":["BID","ASK","HIGH_1","LOW_1","PROD_PERM","RDNDISPLAY","RECORDTYPE"],
"Key":{"Service":"IDN_RDF","Name":"EUR="}}


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
25.3k 87 12 25

Hi @Henri.GARDON

Thanks for getting back.

Can you confirm what you get back from the Source request as requested above - just to see what supported QOS levels we get back from the ADS?

The most likely possibility is that the service on the ADS you are connecting to does not support the QOS you are requesting.

Is there a particular reason why you are insisting on Realtime,Jit-Conflated as the only acceptable QOS level?

Certainly, whilst RTO supports JitConflated, the services on the client ADS may well be configured differently e.g. Timeliness of Realtime or Delayed and Rate of Tick-by-Tick, Jitconflated or Conflated.

By insisting on JitConflated, Realtime for the Qos Ranges - you are limited your request to a very narrow range of 1 i.e. JitConflated, Realtime

I tried the following against my own RTC (ADSPOP) and it works OK:

{
  "Type":"Request",
"Qos":
{"Dynamic":true,"Rate":"JitConflated","Timeliness":"Realtime"},
"WorstQos":
{"Dynamic":true,"Rate":"JitConflated","Timeliness":"Realtime"},
"ID":3,"Domain":"MarketPrice","View":["BID","ASK","HIGH_1","LOW_1","PROD_PERM","RDNDISPLAY","RECORDTYPE"],

"Key":{"Service":"ELEKTRON_DD","Name":"EUR="}
}

which would confirm there is nothing wrong with your JSON request - assuming the ADS supports Realtime,Jit-Conflated for the IDN_RDF service.


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
78.2k 246 52 72

@Henri.GARDON

I got the same error message if I connected to ADS with multiple QoS enabled.

RECEIVED:
[
  {
    "ID":3,
    "Key":{
      "Name":"EUR=",
      "Service":"ELEKTRON_DD"
    },
    "State":{
      "Code":"NoResources",
      "Data":"Suspect",
      "Stream":"Closed",
      "Text":"No multiple qos service supports this QoS."
    },
    "Type":"Status"
  }
]

It seems that the IDN_RDF doesn't support the Realtime/JitConflated QoS.

You can check the QoS that the IDN_RDF supports from the source directory refresh message.

                  "Name":"ELEKTRON_DD",
                  "QoS":{
                    "Data":{
                      "Data":[
                        {
                          "Rate":"TickByTick",
                          "Timeliness":"Realtime"
                        }
                      ],
                      "Type":"Qos"
                    },
                    "Type":"Array"

It is in the "QoS" attribute of the service and the request message should use that QoS.

Moreover, I found this information in the ADS installation guide regaring QoS.

1642654346006.png



1642654346006.png (64.1 KiB)
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
25 8 14 18

Hello @Jirapongse ,


So the client run the refresh message and get :


"ID":5,
"Type":"Refresh",
"Key":
    {"Service":"h03tcEDD"
    ,"Name":"0001.HK"},
"State":
    {"Stream":"Open"
    ,"Data":"Ok"
    ,"Text":"EaaS*All is well"},
"Qos":
    {"Timeliness":"Realtime"
    ,"Rate":"TimeConflated"
    ,"RateInfo":300},
"PermData":"AwLCSUXA",
"SeqNumber":54816,
"Fields":
    {"PROD_PERM":4945
    ,"RDNDISPLAY":62
    ,"DSPLY_NAME":"CKH HOLDINGS"

Based on this what should be a good request for QoS settings ?

This ?

{"Type":"Request",
"Qos":
{"Dynamic":true,
"Rate":"TimeConflated",
"Timeliness":"Realtime"},
"WorstQos":
{"Dynamic":true
,"Rate":"TimeConflated"
,"Timeliness":"Realtime"},
"ID":3,
"Domain":"MarketPrice",
"View":
["BID","ASK","HIGH_1","LOW_1","PROD_PERM","RDNDISPLAY","RECORDTYPE"],
"Key":
{"Service":"h03tcEDD",
"Name":"EUR="}} 

?

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
25.3k 87 12 25

Hi @Henri.GARDON

If you cannot share the Source directory response as requested previously by myself and Jirapongse, then we cannot advise on what Qos level would be OK?

It will tell you what QOS levels the service supports and also if the server supports a Qos range (as you are using). e.g "SupportsQoSRange":0 - means it does not support a range.

I also asked some questions above about your choice of Qos and reasoning - but you have not replied.

The help we can provide is limited by the information you provide.


If the server does not support Multiple Qos then you will need to omit a range and specify a single qos or possibly do not specify a Qos at all. It will be up to the customer to ensure the internal service name they configure the application to request data from provides data at a satisfactory Qos.



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
25 8 14 18

Hi @umer.nalla ,

I already sent the "Source directory response" in my previous answer.

We are talking about this request, right ?

{
  "Domain":"Source",
  "ID":3,
  "Key":{
    "Filter":1
  }
}


This is the client answer :

The client is getting this :
 
 "ID":5,
 "Type":"Refresh",
 "Key":
 {"Service":"h03tcEDD"
 ,"Name":"0001.HK"},
 "State":
 {"Stream":"Open"
 ,"Data":"Ok"
 ,"Text":"EaaS*All is well"},
 "Qos":
 {"Timeliness":"Realtime"
 ,"Rate":"TimeConflated"
 ,"RateInfo":300},
 "PermData":"AwLCSUXA",
 "SeqNumber":54816,
 "Fields":
 {"PROD_PERM":4945
 ,"RDNDISPLAY":62
 ,"DSPLY_NAME":"CKH HOLDINGS"
 

And actually for QoS actually, I have no preference , I just would like to have a configuration working for a first step.

And then also I understand that these settings are not mandatory ?
How will it behave if we do not put them into the JSON request ?

Thanks,


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
25.3k 87 12 25

Hi @Henri.GARDON

The above output is the MarketPrice Data item response for 0001.HK - not the Source Directory response. Whilst the above shows the Qos level of the supplied data, it does not show if the service supports Qos range as you are using.

For example, if I request the source on my RTC I get:

{
    "ID": 3,
    "Type": "Refresh",
    "Domain": "Source",
    "Key": {
      "Filter": 1
    },
    "State": {
      "Stream": "Open",
      "Data": "Ok"
    },
    "Map": {
      "KeyType": "UInt",
      "Entries": [
        {
          "Action": "Add",
          "Key": 10000,
          "FilterList": {
            "Entries": [
              {
                "ID": 1,
                "Action": "Set",
                "Elements": {
                  "Name": "NI_PUB",
                  "SupportsQoSRange": 0,
                  "QoS": {
                    "Type": "Array",
                    "Data": {
                      "Type": "Qos",
                      "Data": [
                        {
                          "Timeliness": "Realtime",
                          "Rate": "TickByTick"
                        }
                      ]
                    }
                  },
                  "Capabilities": {
                    "Type": "Array",
                    "Data": {
                      "Type": "UInt",
                      "Data": [
                        5,
                        6,
                        7,
                        8,
                        9,
                        10
                      ]
                    }
                  },
                  "DictionariesProvided": {
                    "Type": "Array",
                    "Data": {
                      "Type": "AsciiString",
                      "Data": [
                        "RWFFld",
                        "RWFEnum"
                      ]
                    }
                  },
                  "DictionariesUsed": {
                    "Type": "Array",
                    "Data": {
                      "Type": "AsciiString",
                      "Data": [
                        "RWFFld",
                        "RWFEnum"
                      ]
                    }
                  },
                  "AcceptingConsumerStatus": 1
                }
              }
            ]
          }
        },
        {
          "Action": "Add",
          "Key": 10002,
          "FilterList": {
            "Entries": [
              {
                "ID": 1,
                "Action": "Set",
                "Elements": {
                  "Name": "ELEKTRON_DD",
                  "SupportsQoSRange": 0,
                  "QoS": {
                    "Type": "Array",
                    "Data": {
                      "Type": "Qos",
                      "Data": [
                        {
                          "Timeliness": "Realtime",
                          "Rate": "JitConflated"
                        }
                      ]
                    }
                  },
... and so....

As you will note from my source directory, neither my NI_PUB nor ELEKTRON_DD service supports a Qos Range.

Specifying a Qos or Qos Range in your MarketPrice item request is optional - only if your application requires a certain Quality of service in order to function effectively - e.g.

  • if only real-time tick-by-tick data will suffice then you would insist on that as the required Qos level.
  • If a Qos within a given range was acceptable and the services supported Qos Range, the you could specify a Qos Range.

However, in this case,

  • if your h03tcEDD or IDN_RDF service does not support a Qos Range (i.e. if your h03tcEDD / IDN_RDF source entry shows "SupportsQoSRange": 0, then you cannot specify a range.
  • likewise, if the services do not support JitConflated, then you cannot specify JitConflated as your Qos and expect a valid response

In terms of what you use, since you are deploying your application RMDTREPOMM at a client site, then you can only use whatever Qos the client services offer. The Qos services available at a client site are determined by the client feeds and RTDS configuration.

Unless the client has said, they can only work with certain Qos levels and your application should reject other Qos levels, I can't think of a reason why you should specify a Qos in your MarketData Item requests. e.g.

{
"Type":"Request",
    "ID":3,"Domain":"MarketPrice","View":
["BID","ASK","HIGH_1","LOW_1","PROD_PERM","RDNDISPLAY","RECORDTYPE"],
    "Key":{"Service":"ELEKTRON_DD","Name":"EUR="}
}



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
25 8 14 18

I finally the correct answer from the client :

[
{
    "ID":2,
    "Type":"Refresh",
    "Domain":"Source",
    "Key":
    {
        "Service":"h03tcEDD",
        "Filter":3
    },
    "State":
    {
        "Stream":"Open",
        "Data":"Ok"
    },
    "Map":
    {
        "KeyType":"UInt",
        "Entries":
        [
        {
            "Action":"Add",
            "Key":706,
            "FilterList":
            {
                "Entries":
                [
                {
                    "ID":1,
                    "Action":"Set",
                    "Elements":
                    {
                        "Name":"h03tcEDD",
                        "SupportsQoSRange":0,
                        "QoS":
                        {
                            "Type":"Array",
                            "Data":
                            {
                                "Type":"Qos",
                                "Data":
                                [
                                {
                                    "Timeliness":"Realtime",
                                    "Rate":"TimeConflated",
                                    "RateInfo":300
                                }
                                ]
                            }
                        },
                        "Capabilities":
                        {
                            "Type":"Array",
                            "Data":
                            {
                                "Type":"UInt",
                                "Data":
                                [5,6,7,8,9,10,11,13,14,18,19,20,21,23,24,25,26,28,29,33,34,35,126]
                            }
                        },
                        "DictionariesProvided":
                        {
                            "Type":"Array",
                            "Data":
                            {
                                "Type":"AsciiString",
                                "Data":["RWFFld","RWFEnum"]
                            }
                        },
                        "DictionariesUsed":
                        {
                            "Type":"Array",
                            "Data":
                            {
                                "Type":"AsciiString",
                                "Data":["RWFFld","RWFEnum"]
                            }
                        },
                        "Vendor":"Thomson Reuters",
                        "AcceptingConsumerStatus":1
                    }
                },
                {
                    "ID":2,
                    "Action":"Set",
                    "Elements":
                    {
                        "ServiceState":1,
                        "AcceptingRequests":1
                    }
                }
                ]}}]}}] 


This request could work ?

{
"Type":"Request",
"Qos":
    {"Dynamic":true,
    "Rate":"TimeConflated",
    "Timeliness":"Realtime"},
"WorstQos":
    {"Dynamic":true,
    "Rate":"TimeConflated",
    "Timeliness":"Realtime"},
"ID":3,
"Domain":"MarketPrice",
"View":["BID","ASK","CTBTR_1","VALUE_DT1","VALUE_TS1"],
"Key":{"Service":"h03tcEDD","Name":"EUR="}}
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
25.3k 87 12 25

Hi @Henri.GARDON

The above response shows that does NOT accept a Qos Range

"Name":"h03tcEDD",
"SupportsQoSRange":0,
"QoS":
{
    "Type":"Array",
    "Data":
    {
        "Type":"Qos",
        "Data":
        [
        {
            "Timeliness":"Realtime",
            "Rate":"TimeConflated",
            "RateInfo":300
        }
        ]
    }
}

As explained above, if the service does not support a Qos Range you cannot include a Qos Range in your request - as you are doing.

The following should work:

{
"Type":"Request",
"Qos":
    {"Dynamic":true,
    "Rate":"TimeConflated",
    "Timeliness":"Realtime"},
"ID":3,
"Domain":"MarketPrice",
"View":["BID","ASK","CTBTR_1","VALUE_DT1","VALUE_TS1"],
"Key":{"Service":"h03tcEDD","Name":"EUR="}
}

However, as I explained above, if at some point the QOS for h03tcEDD were to change from Realtime Conflated - to something else, your data requests would be rejected. Is this what you and the client want/expect as the behaviour of your application?




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
25 8 14 18

@umer.nalla thank you for the help, so actually when you are talking about QoS range, it is the fact to have both QoS and WorstQos JSON values ?

Having just QoS is enough then ?

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
25.3k 87 12 25

Hii @Henri.GARDON

That is correct - when you specify a Qos and a WorstQos - you are specifying a range - i.e. I will accept data that falls anywhere between the range of those 2 values.

If the service does not support a range, you cannot specify a range - otherwise, you will get the error: "No multiple qos service supports this QoS.","Code":"NoResources"

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
25 8 14 18

Thank you for your input,


however, I did the following test on our local infra and the result is not in line with the above.

Here is our source directory answer :


[
  {
    "ID": 3,
    "Type": "Refresh",
    "Domain": "Source",
    "Key": {
      "Filter": 1
    },
    "State": {
      "Stream": "Open",
      "Data": "Ok"
    },
    "Map": {
      "KeyType": "UInt",
      "Entries": [
        {
          "Action": "Add",
          "Key": 356,
          "FilterList": {
            "Entries": [
              {
                "ID": 1,
                "Action": "Set",
                "Elements": {
                  "Name": "PUB",
                  "SupportsQoSRange": 0,
                  "QoS": {
                    "Type": "Array",
                    "Data": {
                      "Type": "Qos",
                      "Data": [
                        {
                          "Timeliness": "Realtime",
                          "Rate": "JitConflated"
                        }
                      ]
                    }
                  },
                  "Capabilities": {
                    "Type": "Array",
                    "Data": {
                      "Type": "UInt",
                      "Data": [
                        5,
                        6,
                        7,
                        8,
                        9,
                        10
                      ]
                    }
                  },
                  "DictionariesProvided": {
                    "Type": "Array",
                    "Data": {
                      "Type": "AsciiString",
                      "Data": [
                        "RWFFld",
                        "RWFEnum"
                      ]
                    }
                  },
                  "DictionariesUsed": {
                    "Type": "Array",
                    "Data": {
                      "Type": "AsciiString",
                      "Data": [
                        "RWFFld",
                        "RWFEnum"
                      ]
                    }
                  }
                }
              }
            ]
          }
        },
        {
          "Action": "Add",
          "Key": 257,
          "FilterList": {
            "Entries": [
              {
                "ID": 1,
                "Action": "Set",
                "Elements": {
                  "Name": "IDN_RDF",
                  "SupportsQoSRange": 0,
                  "Capabilities": {
                    "Type": "Array",
                    "Data": {
                      "Type": "UInt",
                      "Data": [
                        5,
                        6,
                        7,
                        8,
                        9,
                        10,
                        11,
                        13,
                        18,
                        19,
                        20,
                        21,
                        23,
                        24,
                        25,
                        26,
                        28,
                        33,
                        126
                      ]
                    }
                  },
                  "QoS": {
                    "Type": "Array",
                    "Data": {
                      "Type": "Qos",
                      "Data": [
                        {
                          "Timeliness": "Realtime",
                          "Rate": "JitConflated"
                        }
                      ]
                    }
                  },
                  "DictionariesProvided": {
                    "Type": "Array",
                    "Data": {
                      "Type": "AsciiString",
                      "Data": [
                        "RWFFld",
                        "RWFEnum"
                      ]
                    }
                  },
                  "DictionariesUsed": {
                    "Type": "Array",
                    "Data": {
                      "Type": "AsciiString",
                      "Data": [
                        "RWFFld",
                        "RWFEnum"
                      ]
                    }
                  },
                  "Vendor": "Thomson Reuters",
                  "AcceptingConsumerStatus": 0
                }
              }
            ]
          }
        }
      ]
    }
  }
]


So as you can see the service IDN_RDF is not compatible with QoS range however, I tried to run the below and it worked :


{
    "Type":"Request",
    "Qos":
    {
        "Dynamic":true,
        "Rate":"JitConflated",
        "Timeliness":"Realtime"
    },
    "WorstQos":
    {
        "Dynamic":true,
        "Rate":"JitConflated",
        "Timeliness":"Realtime"
        },
    "ID":3,
    "Domain":"MarketPrice",
    "View":["BID","ASK"],
    "Key":
    {
        "Service":"IDN_RDF",
        "Name":"EUR="
    }
}


Is it expected ?

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
25.3k 87 12 25

Hi @Henri.GARDON

You are not specifying a range - You are just using the same QOS value for best and worst i.e. best JitConflated and worst Jitconflated?


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
25 8 14 18

Hi @umer.nalla

I also tested successfully with this one :

{
    "Type":"Request",
    "Qos":
    {
        "Dynamic":true,
        "Rate":"JitConflated",
        "Timeliness":"Realtime"
    },
    "WorstQos":
    {
        "Dynamic":true,
        "Rate":"TickByTick",
        "Timeliness":"Realtime"
    },
    "ID":3,
    "Domain":"MarketPrice",
    "View":["BID","ASK"],
    "Key":
    {
        "Service":"IDN_RDF",
        "Name":"EUR="
    }
}

QoS and WorstQos are different and it is working.

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.