通过重写ILoadBalancer,来实现我自己想要的预发布,或者灰度发布

核心代码

 /// <summary>/// 自定义负载均衡策略/// </summary>public class AppLoadBalancer: ILoadBalancer{/// <summary>/// 管道前面,计算到的所有下游服务/// </summary>private readonly Func<Task<List<Service>>> _services;private readonly object _lock = new object();private int _last;public AppLoadBalancer(Func<Task<List<Service>>> services){_services = services;}/// <summary>/// 根据http上下文,选择合适的ServiceHostAndPort/// </summary>/// <param name="httpContext"></param>/// <returns></returns>public async Task<Response<ServiceHostAndPort>> Lease(HttpContext httpContext){// 通过负载策略,以及用户的tag,导航到不同的下游服务// 预发布、灰度发布。 逻辑都放这里了,压力过大,后期优化建议迁移出去,分开。// 前端全量部署,或者域名划分var down= Ocelot.Middleware.HttpItemsExtensions.DownstreamRequest(httpContext.Items);down.Headers.Add("aa", "aaaaaaaaaaaaaaaaaaaaa");foreach (var item in httpContext.Request.Headers){Console.WriteLine($"{item.Key}>>>{item.Value}");}var services = await _services();lock (_lock){if (_last >= services.Count){_last = 0;}var next = services[_last];_last++;return new OkResponse<ServiceHostAndPort>(next.HostAndPort);}}public void Release(ServiceHostAndPort hostAndPort){}}

加入到Ocelot的LoadBalancer

Func<IServiceProvider, DownstreamRoute, IServiceDiscoveryProvider, AppLoadBalancer> loadBalancerFactoryFunc =(serviceProvider, Route, serviceDiscoveryProvider) => new AppLoadBalancer(serviceDiscoveryProvider.Get);services.AddOcelot().AddCustomLoadBalancer(loadBalancerFactoryFunc).AddConsul();

配置上修改负载策略,目前使用的consul来完成的,其他方式没有测试过,想实现预发布那也是需要服务注册的

( "Type": "AppLoadBalancer")

    {"DownstreamPathTemplate": "/api/{url}", //服务地址--url变量"DownstreamScheme": "http","UpstreamPathTemplate": "/not/{url}", //网关地址--url变量"UpstreamHttpMethod": [ "Get", "Post" ],"UseServiceDiscovery": true,"ServiceName": "ZhaoxiService22", //consul服务名称"LoadBalancerOptions": {"Type": "AppLoadBalancer" //轮询      LeastConnection-最少连接数的服务器   NoLoadBalance不负载均衡}}

整个还没有完整的写完

Ocelot,自定义负载策略,完成预发布功能相关推荐

  1. Spring Cloud Alibaba - 10 Ribbon 自定义负载均衡策略(权重算法)

    文章目录 Pre 工程 首先屏蔽细粒度配置 然后通过代码设置一个全局配置 指定 GlobalRibbonConfig GlobalRibbonConfig 设置负载均衡策略 开发自定义策略 (权重访问 ...

  2. SpringCloud Ribbon(二)之自定义负载均衡策略IRule

    一.Ribbon负载均衡策略 一个服务对应一个LoadBalancer,一个LoadBalancer只有一个Rule,LoadBalancer记录服务的注册地址,Rule提供从服务的注册地址中找出一个 ...

  3. Spring Cloud Alibaba - 11 Ribbon 自定义负载均衡策略(同集群优先权重负载均衡算法)

    文章目录 Pre 需求 工程 Code 继承AbstractLoadBalancerRule实现自定义Rule 随机权重策略 配置 验证 源码 Pre Spring Cloud Alibaba - 0 ...

  4. 自定义负载均衡策略:

    我们刚刚讲过,只要实现了IRule就可以完成自定义负载均衡,至于具体怎么来,我们先看看他默认的实现 /*** Copyright 2013 Netflix, Inc.** Licensed under ...

  5. Ribbon 自定义负载均衡策略

    Ribbon默认的负载均衡策略默认的有下面几种: 我们也可以自定义负载均衡策略: 修改springcloud-consumer-dept-80的主启动类: 下面开始编写自定义配置类MySelfRule ...

  6. LoadBalance自定义负载均衡策略

    LoadBalance已有策略   LoadBalance的源码中已有两种策略,RandomLoadBalancer(随机).RoundRobinLoadBalancer(轮询,默认的负载均衡策略). ...

  7. API网关—Ocelot之负载均衡

    API网关-Ocelot之负载均衡 负载均衡 请求缓存 负载均衡 分布式架构中,当后端同一个应用的实例较多,负载均衡是非常必要的,否则前端对后端API的请求,可能只命中其中的几个应用实例,这几个实例压 ...

  8. Ribbon自定义负载均衡算法

    Ribbon是什么? Ribbon是Netflix发布的开源项目,主要功能是提供客户端的软件负载均衡算法,将Netflix的中间层服务连接在一起.Ribbon客户端组件提供一系列完善的配置项如连接超时 ...

  9. 预发布环境,Tag发布机制和可重复的部署过程

    导读:作者吕毅在blog.lvscar.info发表了本篇文章,文中分享了Joel Test .预发布环境.Tag发布机制以及可重复的部署过程等.内容如下: 周末聚会,无意间聊起建筑行业.自己是搞软件 ...

最新文章

  1. idea无法搜索插件问题解决
  2. Android移动开发之【Android实战项目】在Service中弹出Dialog对话框,即全局性对话框
  3. MySQL5.6一主多从复制配置方式一:Tungsten复制中间件
  4. 【知识星球】卷积核和感受野可动态分配的分组卷积
  5. STM32开发 -- 设置MCU运行频率
  6. 从《英雄联盟》的装备系统谈玩家行为与游戏设计
  7. 你可能不知道的小知识-bug为什么叫bug
  8. 搜狐新闻推荐算法原理 | “呈现给你的,都是你所关心的”
  9. mysql约束类型 A P_mysql笔记: 数据类型、约束、范式
  10. 【转】STM32中的抢占优先级、响应优先级概念
  11. 蓝桥杯2015年第六届C/C++省赛C组第一题-隔行变色
  12. duilib学习 --- 360demo 学习
  13. cacti 模版大全
  14. java项目源码分享网_分享二十套Java项目源码
  15. win10 oracle fonts,win10字体无法粘贴到fonts怎么办 字体无法粘贴到fonts的解决方法...
  16. 时序分析-利用深度时空残差网络预测城市范围的交通流量
  17. JWT实现接口双重认证,提供安全又不复杂的接口安全能力
  18. matlab怎么表示二元函数,如何用Matlab画二元函数?
  19. csv格式导出,身份证号码显示不全
  20. Windows下Pidgin介绍/安装配置图文攻略

热门文章

  1. java 磁力链接下载_java构建磁力链接 返回数据解码
  2. 身体各个局部暴瘦的方法!
  3. nmap为什么这么强大之主机发现
  4. 计算机图形学在线考试,《计算机图形学》试题-A卷及参考答案
  5. 使用一片74LS74实现四分频
  6. 贝加莱学习笔记第九节常用设置
  7. 2023年最新版Vue3(官方文档超细致教程一)
  8. 【论文阅读】LIO-SAM: Tightly-coupled Lidar Inertial Odometry via Smoothing and Mapping
  9. Thymeleaf实现行内背景样式,补充行内样式属性
  10. swiper轮播图动态设置时间,在某个slide上设置单独的停留时间