有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微服务——网关(2):ocelot集成consul的更多相关文章

  1. .NET Core微服务二:Ocelot API网关

    .NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使 ...

  2. .NET Core微服务之基于Ocelot实现API网关服务

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.啥是API网关? API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端 ...

  3. .NET Core微服务之基于Ocelot实现API网关服务(续)

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.负载均衡与请求缓存 1.1 负载均衡 为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientServic ...

  4. .NET Core微服务之基于Steeltoe集成Zuul实现统一API网关

    Tip: 此篇已加入.NET Core微服务基础系列文章索引,本篇接上一篇<基于Steeltoe使用Eureka实现服务注册与发现>,所演示的示例也是基于上一篇的基础上而扩展的. => ...

  5. .NET Core微服务之基于Ocelot+Butterfly实现分布式追踪

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.什么是Tracing? 微服务的特点决定了功能模块的部署是分布式的,以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错 ...

  6. .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权

    Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.案例结构总览 这里,假设我们有两个客户端(一个Web网站,一个移动App),他们要使用系统,需要通过API网关(这里API网关始终作为 ...

  7. .Net Core微服务——网关(1):ocelot集成及介绍

    网关是什么 简单来说,网关就是暴露给外部的请求入口.就和门卫一样,外面的人想要进来,必须要经过门卫.当然,网关并不一定是必须的,后端服务通过http也可以很好的向客户端提供服务.但是对于业务复杂.规模 ...

  8. .NET Core微服务之路:基于Consul最少集群实现服务的注册与发现(二)

    重温Consul最少化集群的搭建  

  9. .NET Core微服务一:Consul服务中心

    本文的项目代码,在文章结尾处可以下载. 防爬虫,本文的网址是:https://www.cnblogs.com/shousiji/p/12253295.html 本文使用的环境:Windows10 64 ...

随机推荐

  1. 大白话透彻讲解 Promise 的使用,读完你就懂了

    一.为什么使用Promise? 我们知道 js 执行的时候,一次只能执行一个任务,它会阻塞其他任务.由于这个缺陷导致 js 的所有网络操作,浏览器事件,都必须是异步执行.异步执行可以使用回调函数执行. ...

  2. P4480-[BJWC2018]餐巾计划问题【三分,贪心】

    正题 题目链接:https://www.luogu.com.cn/problem/P4480 题目大意 \(n\)天,第\(i\)天需要\(a_i\)个餐巾. 每个餐巾价格为\(p\),使用完后有两种 ...

  3. PyCharm中文下载与安装教程【2021年更新】

    第一章:下载与安装 1.1   [版本介绍]多个版本的介绍与选择 Jetbrain 公司是一家专业的 IDE 生产商,只要是市面上主流的编程语言,Jetbrain 都有相应的产品. 比如:Python ...

  4. MySQL安装指导文档

    MySQL 是最流行的关系型数据库管理系统,可以在本地搭建一个mysql的环境,便于学习. windows7/windows10 5.7.26 安装mysql前环境准备工作 1) 要有Net fram ...

  5. Excel 高亮当前行、高亮重复行的探索

    本文原创,转载请注明出处:https://www.cnblogs.com/wotent/p/15348891.html TLDR 下载文件 高亮.zip ,将解压后的"高亮.xlam&quo ...

  6. FastAPI(54)- 详解 Request 请求对象

    背景 前面讲了可以自定义 Response,那么这里就讲下请求对象 Request 可以通过 Request 来获取一些数据 获取请求基础信息 @app.get("/base") ...

  7. Docker-初见

    目录 Docker概述 Docker历史 Docker Docker的基本组成 Docker安装 使用流程 底层原理 Docker的常用命令 Portainer 可视化面板安装 镜像原理之联合文件系统 ...

  8. 2020.3.21--ICPC训练联盟周赛Benelux Algorithm Programming Contest 2019

    A Appeal to the Audience 要想使得总和最大,就要使最大值被计算的次数最多.要想某个数被计算的多,就要使得它经过尽量多的节点.于是我们的目标就是找到 k 条从长到短的链,这些链互 ...

  9. 【Java虚拟机11】线程上下文类加载器

    前言 目前学习到的类加载的知识,都是基于[双亲委托机制]的.那么JDK难道就没有提供一种打破双亲委托机制的类加载机制吗? 答案是否定的. JDK为我们提供了一种打破双亲委托模型的机制:线程上下文类加载 ...

  10. UltraSoft - Beta - Postmortem事后分析

    UltraSoft - Beta - PostMORTEM 设想和目标 我们的软件要解决什么问题?是否定义得很清楚?是否对典型用户和典型场景有清晰的描述? 解决的问题和定义都在[软软软]功能规格说明书 ...