zoukankan      html  css  js  c++  java
  • .net core使用ocelot---第五篇 服务质量

    简介

      .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": 9001  
            }  
        ],  
        "UpstreamPathTemplate": "/customers",  
        "UpstreamHttpMethod": [ "Get" ],  
        "QoSOptions": {  
            "ExceptionsAllowedBeforeBreaking":2,  
            "DurationOfBreak":5000,  
            "TimeoutValue":2000  
        }  
    }  

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

    注意

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

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

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

      效果如下

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

      

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

      五秒后,服务可以访问。

      好了,就到这。

      源码在此

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

  • 相关阅读:
    P20 HTTP 方法的安全性与幂等性
    P19 查询参数
    P18 写代码:过滤和搜索
    P17 过滤和搜索
    P16 HTTP HEAD
    golang的json操作[转]
    Android中的Service 与 Thread 的区别[转]
    iOS的block内存管理
    Go并发编程基础(译)
    golang闭包里的坑
  • 原文地址:https://www.cnblogs.com/xlxr45/p/11321481.html
Copyright © 2011-2022 走看看