.Net?Core微服务网关Ocelot集成Consul

 更新时间:2022-01-19 13:24:06   作者:佚名   我要评论(0)

有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力。而ocelot如果集成了consul,那ocelot也能拥有

有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禁止上生产,太脆弱,一挂全完。

到此这篇关于.Net Core微服务网关Ocelot集成Consul的文章就介绍到这了。希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

您可能感兴趣的文章:
  • .Net?Core微服务网关Ocelot超时、熔断、限流
  • .Net?Core微服务网关Ocelot集成Consul
  • .Net?Core微服务网关Ocelot基础介绍及集成
  • ASP.NET Core Api网关Ocelot的使用初探
  • ASP.NET Core3.1 Ocelot负载均衡的实现
  • ASP.NET Core3.1 Ocelot认证的实现
  • ASP.NET Core3.1 Ocelot路由的实现
  • 详解给Ocelot做一个Docker镜像

相关文章

  • .Net?Core微服务网关Ocelot集成Consul

    .Net?Core微服务网关Ocelot集成Consul

    有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力。而ocelot如果集成了consul,那ocelot也能拥有
    2022-01-19
  • Go中defer使用场景及注意事项

    Go中defer使用场景及注意事项

    目录1. 简介1.1 使用场景1.2 注意事项2. defer 数据结构3. 执行机制3.1 栈上分配3.2 开放编码4. 参考1. 简介 defer 会在当前函数返回前执行传
    2022-01-19
  • python从入门到实践之字典

    python从入门到实践之字典

    目录字典概述字典定义查找字典的值给字典增加键值对给字典修改键值对的值给字典删除键值对字典中可以包含列表值列表中可以包含字典字典中可以
    2022-01-19
  • 正则表达式用法详解

    正则表达式用法详解

    正则表达式之基本概念 在我们写页面时,往往需要对表单的数据比如账号、身份证号等进行验证,而最有效的、用的最多的便是使用正则表达式来验
    2022-01-09
  • PHP随机生成用户信息实例分析

    PHP随机生成用户信息实例分析

    本文给大家介绍如何随机生成用户信息(号码、名字、时间),希望对需要的朋友有所帮助! 随机生成号码 function generate_name($count,$ty
    2022-01-08
  • php封装pdo实例以及pdo长连接的优缺点总结

    php封装pdo实例以及pdo长连接的优缺点总结

    一、前言 最近需要写脚本来实现崩溃日志的入库,不出所料又是脱离于框架的,那么行吧,咱们只能自己封装数据库相关操作了。博主这里选择了封
    2022-01-08
  • php中echo、print和print_r的区别点及用法总结

    php中echo、print和print_r的区别点及用法总结

    本教程操作环境:windows10系统、PHP7.1版,DELL G3电脑 php中echo、print和print_r的区别是什么 echo是PHP语句, print和print_r是函数,语句
    2022-01-08
  • PHP对接抖音开发平台接口的详细教程

    PHP对接抖音开发平台接口的详细教程

    目录一、说明二、代码三、代码运行需知 四、功能扩展五、接口调用需要注意的点六、接口文档中的 ‘坑'(以订单列表接口为例)1、请求参数、响
    2022-01-08
  • php7 安装mysqli实例讲解

    php7 安装mysqli实例讲解

    本文操作环境:Windows7系统、php-7.1.5、Dell G3。 php7 怎么安装mysqli? centos php7 安装mysqli扩展心得 在新配服务器时发现,php无法
    2022-01-08
  • php去掉一维数组的键值的实例方法

    php去掉一维数组的键值的实例方法

    ?在 PHP 中,数组的每个元素都是由键值对(key-value)组成,通过元素的键名来访问对应键的值。 提示:“索引”和“键名”指的是同一样东西
    2022-01-08

最新评论