Quality of Service

Label: QoS

Ocelot supports one QoS capability at the current time. You can set on a per Route basis if you want to use a circuit breaker when making requests to a downstream service. This uses an awesome .NET library called Polly, check them out in official repo.

The first thing you need to do if you want to use the Administration API is bring in the relevant NuGet package:

Install-Package Ocelot.Provider.Polly

Then in your ConfigureServices method to add Polly services we must call the AddPolly() extension of the OcelotBuilder being returned by AddOcelot() [1] like below:

services.AddOcelot()
    .AddPolly();

Then add the following section to a Route configuration:

"QoSOptions": {
  "ExceptionsAllowedBeforeBreaking": 3,
  "DurationOfBreak": 1000,
  "TimeoutValue": 5000
}
  • You must set a number greater than 0 against ExceptionsAllowedBeforeBreaking for this rule to be implemented. [2]

  • DurationOfBreak means the circuit breaker will stay open for 1 second after it is tripped.

  • TimeoutValue means if a request takes more than 5 seconds, it will automatically be timed out.

You can set the TimeoutValue in isolation of the ExceptionsAllowedBeforeBreaking and DurationOfBreak options:

"QoSOptions": {
  "TimeoutValue": 5000
}

There is no point setting the other two in isolation as they affect each other!

If you do not add a QoS section, QoS will not be used, however Ocelot will default to a 90 seconds timeout on all downstream requests. If someone needs this to be configurable, open an issue. [2]