zoukankan      html  css  js  c++  java
  • .Net Core微服务——Ocelot(2):集成Consul 老马

    有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力。而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略,灵活性更强。

    (建议看完前一篇文章再来实践这一篇,不然可能有难度)

    上干货。

    首先打开上一篇新建好的项目,继续添加nuget包:

    然后注册相关服务:

            public void ConfigureServices(IServiceCollection services)
            {
                services.AddOcelot()
                    .AddConsul()
                    .AddConfigStoredInConsul();
            }

    接下来还需要修改下配置文件:

    {
      "Routes": [
        {
          "DownstreamPathTemplate": "/{url}",
          "DownstreamScheme": "http",
          //"DownstreamHostAndPorts": [
          //  {
          //    "Host": "123.123.123.123",
          //    "Port": 5050
          //  }
          //],
          "UpstreamPathTemplate": "/MJ/{url}",
          "UpstreamHttpMethod": [ "Get", "Post" ],
          "ServiceName": "study_consul",
          "LoadBalancerOptions": {
            "Type": "RoundRobin"
          }
        }
      ],
      "GlobalConfiguration": {
        "ServiceDiscoveryProvider": {
          "Host": "42.193.182.64",
          "Port": 88
        }
      }
    }

    注释部分是原先常规的转发规则,变色部分是集成consul以后新增的配置。

    这里说下配置项LoadBalancerOptions(负载均衡),官方实现了4个负载均衡器,分别是:

    1、LeastConnection - 跟踪哪些服务正在处理请求,并向现有请求最少的服务发送新请求。

    2、RoundRobin - 轮询。

    3、NoLoadBalancer - 从配置或服务发现中获取第一个可用服务。

    4、CookieStickySessions - 使用 cookie 将所有请求粘贴到特定服务器。

    如果选择了第四个,那么需要额外的参数来描述cookie,比如:

    "LoadBalancerOptions": {
            "Type": "CookieStickySessions",
            "Key": "ASP.NET_SessionId",
            "Expiry": 1800000 //过期时间
        },

    关于负载均衡器,本文不多做详解,回到主题。

    consul需要单独搭建,所以我准备了一个拥有6个节点的consul集群:

    然后在集群下注册了3个服务:

    这时运行网关并请求,网关会把请求自动转到远程的consul,并且在已有的consul服务中轮询调用。来看一下运行结果:

    多刷新几下:

    如果你得到了类似的结果,恭喜你,已经完成了集成的操作。同时,还可以解锁一个新操作:热更新。

    热更新

    打开consul控制面板,找到Key/Value,你会发现这里多了一个键值对:

    进入查看会发现,这是ocelot的配置:

    这一份配置文件里包含了当前版本的ocelot支持的所有配置项,并且修改后即时生效。

    改个路由证明下:

    原来:"UpstreamPathTemplate": "/MJ/{url}"
    现在:"UpstreamPathTemplate": "/{url}"

    save以后再请求:

    这感觉,酸爽。

    既然是搞技术,自然不能脱离实际。上面的consul集群、consul客户端、网关程序都部署在不同的阿里云服务器上,和生产环境一样。学习的话,部署到本机也可以,consul单机也可以。如果你没有consul基础或者理解的不清晰,可以看我之前的系列文章,应该有帮助,往前翻一翻就有。友情提醒一下,单体的ocelot、consul禁止上生产,太脆弱,一挂全完。

    声明:未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则视为侵权。
    本文原创发表于博客园,作者为暮城倾心。欢迎转载。Donation(扫码支持作者)↓

    微信
    支付宝
  • 相关阅读:
    Android四大基本组件介绍与生命周期
    论Android产品高效开发之路
    android工程目录分析
    android推送思路
    android类库
    Android实现应用下载并自动安装apk包
    自定义 Android 对话框 (AlertDialog) 的样式
    Android adb shell 命令详解
    Complexities
    Combination Sum II
  • 原文地址:https://www.cnblogs.com/muchengqingxin/p/15524591.html
Copyright © 2011-2022 走看看