简介

  .net core使用ocelot---第一篇 简单使用 
  .net core使用ocelot---第二篇 身份验证使用
  .net core使用ocelot---第三篇 日志记录 
  .net core使用ocelot---第四篇 限流熔断

本文介绍Ocelot的Qos(服务质量)模块。

什么是QoS

服务质量是指能够为不同的应用程序、用户或数据流提供不同的优先级,或者保证数据流具有一定的性能级别。

Ocelot利用Polly实现服务质量控制。我们用Ocelot 4.0.0创建我们的例子。

准备

创建两个可以运行的项目。大致和上篇文章一致。

运行后,我们会在http://localhost:9000/customers这个路由添加QoS。

在configuration.json添加QoS

我们只是需要添加QoSOptions节点即可。

QoSOptions包含3个重要的属性。

  1. ExceptionAllowedBeforeBreaking

该值必须大于0,该值是指当异常发生达到此值断路器会中断。

   2. DurationOfBreak

该值指定断路器中断后会保持多久。该值的单位是毫秒。

   3. TimeoutValue

该值指定当请求超过此值会被自动设置为超时。同样该值的单位是毫秒。

下面是一个配置样例。

{
"DownstreamPathTemplate": "/api/values",
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port":
}
],
"UpstreamPathTemplate": "/customers",
"UpstreamHttpMethod": [ "Get" ],
"QoSOptions": {
"ExceptionsAllowedBeforeBreaking":,
"DurationOfBreak":,
"TimeoutValue":
}
}

  上面的配置意味着,当我们访问http://localhost:9000/customers,如果超过两秒未回应,会报超时错误。如果服务抛出第二个异常,则服务器将在5秒内无法访问。

注意

QoSOptions还有一个属性TimeoutStrategy,该属性的默认值是TimeoutStrategy.Pessimistic 然而在此项目,还是不要改变这个值。

为了查看效果,我改一下APIService

private static int _count = ;  

// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
_count++;
System.Console.WriteLine($"get...{_count}");
if(_count <= )
{
Thread.Sleep();
}
return new string[] { "value1", "value2" };
}

  效果如下

  当我们第一次访问时,断路器中断5秒。

  

  第二次访问它告诉我们断路器打开,我们五秒内不能访问服务。

  五秒后,服务可以访问。

  好了,就到这。

  源码在此

  网盘链接:https://pan.baidu.com/s/17sqfGcYx8yEHRL_LwKAUlA
  提取码:p3d0

.net core使用ocelot---第五篇 服务质量的更多相关文章

  1. ASP.NET Core 学习笔记 第五篇 ASP.NET Core 中的选项

    前言 还记得上一篇文章中所说的配置吗?本篇文章算是上一篇的延续吧.在 .NET Core 中读取配置文件大多数会为配置选项绑定一个POCO(Plain Old CLR Object)对象,并通过依赖注 ...

  2. Ocelot(五)- 流量限制、服务质量

    Ocelot(五)- 流量限制.服务质量 作者:markjiang7m2 原文地址:https://www.cnblogs.com/markjiang7m2/p/10965300.html 源码地址: ...

  3. ExpandoObject与DynamicObject的使用 RabbitMQ与.net core(一)安装 RabbitMQ与.net core(二)Producer与Exchange ASP.NET Core 2.1 : 十五.图解路由(2.1 or earler) .NET Core中的一个接口多种实现的依赖注入与动态选择看这篇就够了

    ExpandoObject与DynamicObject的使用   using ImpromptuInterface; using System; using System.Dynamic; names ...

  4. 解剖SQLSERVER 第五篇 OrcaMDF里读取Bits类型数据(译)

    解剖SQLSERVER 第五篇  OrcaMDF里读取Bits类型数据(译) http://improve.dk/reading-bits-in-orcamdf/ Bits类型的存储跟SQLSERVE ...

  5. EnjoyingSoft之Mule ESB开发教程系列第五篇:控制消息的流向-数据路由

    目录 1. 使用场景 2. 基于消息头的路由 2.1 使用JSON提交订单的消息 2.2 使用XML提交订单的消息 2.3 使用Choice组件判断订单格式 3. 基于消息内容的路由 4. 其他控制流 ...

  6. 跟我学SpringCloud | 第十五篇:微服务利剑之APM平台(一)Skywalking

    目录 SpringCloud系列教程 | 第十五篇:微服务利剑之APM平台(一)Skywalking 1. Skywalking概述 2. Skywalking主要功能 3. Skywalking主要 ...

  7. .NET Core资料精选:架构篇

    .NET 6.0 马上就要发布,高性能云原生开发框架.希望有更多的小伙伴加入大.NET阵营.这是本系列的第三篇文章:架构篇,喜欢的园友速度学起来啊. 本系列文章,主要分享一些.NET Core比较优秀 ...

  8. 【Python五篇慢慢弹】快速上手学python

    快速上手学python 作者:白宁超 2016年10月4日19:59:39 摘要:python语言俨然不算新技术,七八年前甚至更早已有很多人研习,只是没有现在流行罢了.之所以当下如此盛行,我想肯定是多 ...

  9. 【Python五篇慢慢弹】数据结构看python

    数据结构看python 作者:白宁超 2016年10月9日14:04:47 摘要:继<快速上手学python>一文之后,笔者又将python官方文档认真学习下.官方给出的pythondoc ...

随机推荐

  1. Python3之logging模块浅析

    Python3之logging模块浅析   目录 Python3之logging模块浅析 简单用法 日志与控制台同时输出 一个同时输出到屏幕.文件的完成例子 日志文件截取 日志重复打印问题解决 问题分 ...

  2. 搭建阿里云服务 FTP 折中方案

    该配置的服务都配置了,端口也都打开了 ,但是ftp  就是连接不上 就是打不开目录 8uftp  出现以下情况 配置文件逐条检查,端口逐个检查 都没有问题,还是出现这种情况,实在没辙,蛋疼...... ...

  3. Java线程同步的Monitor机制(Lock配合Condition)

    Monitor模式是一种常见的并行开发机制, 一个Monitor实例可以被多个线程安全使用, 所有的monitor下面的方法在运行时是互斥的, 这种互斥机制机制可以用于一些特性, 例如让线程等待某种条 ...

  4. USB:USB通信中的端点(endpoint)和四种传输模式

    USB的传输模式有4种,分别是控制传输(Control Transfer).中断传输(Interrupt Transfer).批量传输或叫块传输(Bulk Transfer).实时传输或叫同步传输(I ...

  5. GSON工具类

    import java.util.Map; import com.google.gson.reflect.TypeToken; import com.google.gson.FieldNamingPo ...

  6. 位运算在 PHP 实际项目当中的高级运用

    我们首先来看一个系统中常见的需求: 有一个广告表,我们要对广告做显示控制: 手动上下线. 只允许 VIP 查看. 可能的表结构如下: CREATE TABLE `finger_ad` ( `ad_id ...

  7. [Algorithm] Graph

    图的概念有点多,在此只讨论最基础的内容,所以选择比较薄的高教版<数据结构>. 1.4 非线性数据结构--图 ........................................ ...

  8. VC++6.0/VC6使用c99的stdint.h

    如果使用https://github.com/mattn/gntp-send/blob/master/include/msinttypes/stdint.h会报错: error C2733: seco ...

  9. HTML-头部

    HTML <head> 元素 <head> 元素是所有头部元素的容器.<head> 内的元素可包含脚本,指示浏览器在何处可以找到样式表,提供元信息,等等. 以下标签 ...

  10. ubuntu下MySQL忘记密码重置方法

    方法一: 1):编辑mysqld.cnf文件 sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf 2):在文件中的skip-external-locking一行的下面 ...