简介

  .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. mysql 唯一键

    唯一键特点: 1.唯一键在一张表中可以有多个. 2.唯一键允许字段数据为NULL,NULL可以有多个(NULL不参与比较) //一个表中允许存在多个唯一键,唯一键允许为空,在不为空的情况下,不允许重复 ...

  2. 使用docker 基于centos7制作mysql镜像

    说明:由于业务需要使用centos7.6+mysql5.7+jdk8以及其他的java程序,本想在网上找一个现成的,发现镜像都不适合我. 一.yum方式安装mysql 1.编写dockerfile文件 ...

  3. hadoop大作业

    1.数据准备 2.把CSV添加到/bigdatacase/dataset中 3.检查前5行并删除第一行 4.将csv文件导入hadoop并检查前10行数据情况 5.数据文件导入hive 6.在Hive ...

  4. javacpp, javacv: 封装了FFmpeg、OpenCV等计算机视觉编程人员常用库的接口

    jvavacpp:     一个java调用jni的库,支持安卓. javacv:      封装了FFmpeg.OpenCV等计算机视觉编程人员常用库的接口,可以通过其中的Utility类方便的在包 ...

  5. 前端js 爬取 获取网页

    1.存在问题 same origin policy(同源策略) 页面中的Javascript只能读取,访问同域的网页.这里需要注意的是,Javascript自身的域定义和它所在的网站没有任何关系,只和 ...

  6. Netty执行流程分析与重要组件介绍

    一.环境搭建 创建工程,引入Netty依赖 二.基于Netty的请求响应Demo 1.TestHttpServerHandle  处理器.读取客户端发送过来的请求,并且向客户端返回hello worl ...

  7. Cache busting

    Cache busting https://www.keycdn.com/support/what-is-cache-busting https://curtistimson.co.uk/post/f ...

  8. Qt QSplitter任意拆分窗口

    Qt拆分窗口可以使用QSplitter,也可以使用比较容易使用布局控件来完成,本文章给出使用QSplitter分割窗口的例子. QSplitter 继承自QFrame,而QFrame又继承自QWidg ...

  9. leetcode 266.Palindrome Permutation 、267.Palindrome Permutation II

    266.Palindrome Permutation https://www.cnblogs.com/grandyang/p/5223238.html 判断一个字符串的全排列能否形成一个回文串. 能组 ...

  10. [转]c++ pthread 多线程简介

    链接:https://blog.csdn.net/u013894427/article/details/83827173 pthread 入口函数类型说明void * func1(void * t)v ...