Ocelot 入门Demo系列(01-Ocelot极简单Demo及负载均衡的配置)

来源:https://www.cnblogs.com/7tiny/p/10493805.html

【前言】

640?wx_fmt=png

Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。这些功能只都只需要通过一个统一的Ocelot.Json配置文件简单的配置即可完成。

简单的来说Ocelot是一堆的asp.net core middleware组成的一个管道。

当它拿到请求之后会用一个request builder来构造一个HttpRequestMessage发到下游的真实服务器,等下游的服务返回response之后再由一个middleware将它返回的HttpResponseMessage映射到HttpResponse上。

Ocelot的基本使用

用一台web service来host Ocelot,在这里有一个json配置文件,里面设置了所有对当前这个网关的配置。它会接收所有的客户端请求,并路由到对应的下游服务器进行处理,再将请求结果返回。而这个上下游请求的对应关系也被称之为路由。

640?wx_fmt=png

集成Identity Server

当我们涉及到认证和鉴权的时候,我们可以跟Identity Server进行结合。当网关需要请求认证信息的时候会与Identity Server服务器进行交互来完成。

640?wx_fmt=png

网关集群

只有一个网关是很危险的,也就是我们通常所讲的单点,只要它挂了,所有的服务全挂。这显然无法达到高可用,所以我们也可以部署多台网关。当然这个时候在多台网关前,你还需要一台负载均衡器。

640?wx_fmt=png

Consul 服务发现

在Ocelot已经支持简单的负载功能,也就是当下游服务存在多个结点的时候,Ocelot能够承担起负载均衡的作用。但是它不提供健康检查,服务的注册也只能通过手动在配置文件里面添加完成。这不够灵活并且在一定程度下会有风险。这个时候我们就可以用Consul来做服务发现,它能与Ocelot完美结合。

640?wx_fmt=png

【Demo】

  本篇文章为Ocelot入门的第一步要走的步骤,使用Ocelot作为微服务的网关

  1. Ocelot网关api的创建

  2. 三个下游Demo微服务接口的创建

  3.  网关轮询负载均衡的演示

【实现过程】

一、创建下游微服务

1. 新建3个asp.net core webapi项目,分别命名为Service1,Service2,Service3

640?wx_fmt=png

2. 将三个项目的启动端口分别设置为39991,39992,39993

在每个服务的属性设置中将服务的host端口略作修改,分别叫做39991,39992,39993

640?wx_fmt=png

3. 将默认的/api/values接口的返回值稍做修改,让其比较明显对应三个端口

 打开默认生成的/api/Values控制器Action,改造原来的Get方法返回值,让其对应三个端口以便提高区分度

例如Service1:

640?wx_fmt=jpeg

Service2和Service3依次修改

二、Ocelot网关Api

1. 新建一个asp.net core webapi项目,命名为OcelotGateway

640?wx_fmt=png

2. 该项目引入Nuget: Ocelot 最新稳定版

640?wx_fmt=png

640?wx_fmt=jpeg

3. 根目录添加配置文件Ocelot.json,添加上述三个api地址信息

根目录下新建一个Jso文件

640?wx_fmt=png

内容如下(最简单的配置,采用默认路由模板):

640?wx_fmt=gif

 1 {
2 "ReRoutes": [
3 {
4 // - 上游服务配置
5 "UpstreamPathTemplate": "/{url}",
6 "UpstreamHttpMethod": [ "Get", "Post", "Put", "Delete" ],
7
8 // - 下游服务配置
9 "DownstreamPathTemplate": "/{url}",
10 "DownstreamScheme": "http",
11 "DownstreamHostAndPorts": [
12 {
13 "Host": "localhost",
14 "Port": 39991
15 },
16 {
17 "Host": "localhost",
18 "Port": 39992
19 },
20 {
21 "Host": "localhost",
22 "Port": 39993
23 }
24 ],
25
26 // - LoadBalancer将决定负载均衡的算法,三种取值
27 // RoundRobin:轮流发送
28 // LeastConnection:将请求发往最空闲的那个服务器
29 // NoLoadBalance:总是发往第一个请求或者是服务发现
30 "LoadBalancerOptions": {
31 "Type": "RoundRobin"
32 }
33 }
34 ],
35 "GlobalConfiguration": {
36 "BaseUrl": "https://api.mybusiness.com"
37 }
38 }

640?wx_fmt=gif

640?wx_fmt=png

里面指定了相关配置项:

  • 上游服务器请求路由模板

  • 下游服务器转发时的请求路由模板

  • 下游服务器的三个相同api的不同地址(模拟负载均衡)

  • 负载均衡的策略(轮询)

4. 调整OcelotGateway项目的Programe和Start需要配置的相关代码(详情见代码)

 修改Program.cs文件,引入Ocelot.Json

640?wx_fmt=png

改造StartUp.cs文件的配置项,.netcore请求管道内加入Ocelot

640?wx_fmt=png

三、运行

1. 先同时运行三个下游微服务,可以看到三个浏览器窗口分别返回了三个接口对应的返回值

可以在vs中设置多启动项,让三个服务同时启动

640?wx_fmt=png

640?wx_fmt=png

然后我们运行三个服务,可以看到三个浏览器窗口分别打开了三个服务,并返回了Demo api的返回值

640?wx_fmt=png

三个微服务启动成功

2. 运行OcelotGateway项目,可以看到返回了第一个下游微服务的返回值

我们单独运行OcelotGateway项目

640?wx_fmt=png

可以看到Ocelot服务也被host成功

640?wx_fmt=png

并且通过通用模板转发到了其中一个微服务上,返回了响应值。

3. 刷新Gateway项目的窗口,可以看到根据我们配置的轮询复杂均衡策略分别轮询地返回了三个接口的结果

 既然我们配置了轮询的负载均衡,那么我们刷新Gateway项目地址看是否会分别请求到三个微服务上。

640?wx_fmt=png

640?wx_fmt=png

640?wx_fmt=png

 Gif版本:

640?wx_fmt=gif

可以看到,相同的请求被转发到了不通的api接口上,且是按我们配置的负载均衡策略顺序轮询转发

【项目源码】

项目源码已托管至GitHub:https://github.com/sevenTiny/Demo.Ocelot

说明:为了更好地展示我们的项目配置是渐进性的,我们采用分支策略来展示不同阶段的Demo成果,master分支为当前所有配置的功能总和

例如:roadmap-01分支对应我们本篇文章的源代码,对应说明文档 “01-Ocelot极简单Demo及负载均衡的配置

原文地址:https://www.cnblogs.com/7tiny/p/10493805.html

.NET社区新闻,深度好文,欢迎访问公众号文章汇总 http://www.csharpkit.com
640?wx_fmt=jpeg


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/316856.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CF464E The Classic Problem(主席树+哈希+最短路)

CF464E The Classic Problemproblemsolutioncodeproblem 题目链接 solution 经典题。 本题很特别的是每条边的边权都是 222 的幂,而且数据读入的是指数。 所以可以将路径权值看作一个二进制串,每加一条边就是对应二进制位 111,当然会有相…

CF1192B Dynamic Diameter(LCT)

Foreword\text{Foreword}Foreword zhengrunzhe 大佬的矩阵做法过于神奇,蒟蒻无法理解… 欧拉序的做法确实非常巧妙,但我也想不到这么神仙的做法… 提供一种可能简单一些的 LCT 做法。 由于本人 LCT 无法像大佬那么神,讲的会比较详细一些&…

博弈论(基础概念+例题)

博弈论(b站视频) 文章目录一些概念以Nim游戏为例Nim游戏介绍定义 必败/必胜局面必败/必胜局面的判定引理Nim游戏判定引理的等价命题有向图游戏对判定引理的数学描述-Sg函数有向图游戏的和题目:[有向图游戏][有向图游戏的和][构造/转化类]一些概念 以Nim游戏为例 Ni…

.NET Core 3.0 linux 部署小贴士

dotnet core 3.0 目前还是测试版,在linux下安装 sdk 需要有一些注意事项1.下载urlhttps://dotnet.microsoft.com/download/thank-you/dotnet-sdk-3.0.100-preview-009812-linux-x64-binaries2.安装指令mkdir -p $HOME/dotnet && tar zxf dotnet-sdk-3.0.100…

莓良心(第二类斯特林数)

莓良心problemsolutioncodeproblem 莓在执行任务时,收集到了 nnn 份岩浆能源,其中第 iii 份的能量值是 wiw_iwi​ ,她 决定将它们分成恰好 kkk 组带回基地,每一组都要有至少 111 份能源。 每一组能源会对运输设备产生负荷值&…

CF1654E Arithmetic Operations(根号分治)

解析 降智谔谔题。 明明都把做法大块想出来,最后很沙雕的一步掉牛角尖里了… 无能狂怒之下写了一发实际复杂度 n2n^2n2 的代码。 不过暴力艹题还是很爽的。 可能确实不太好卡吧,让我自己构造我是卡不掉。 更何况CF应该不会有人和我一样在如此沙雕的地方…

P2575 高手过招

P2575 高手过招 题意: AKN玩游戏玩累了,于是他开始和同伴下棋了,玩的是跳棋!对手是wwx!这两位上古神遇在一起下棋,使得棋局变得玄幻莫测,高手过招,必有一赢,他们都将用…

PuppeteerSharp: 更友好的 Headless Chrome C# API

前端就有了对 headless 浏览器的需求,最多的应用场景有两个UI 自动化测试:摆脱手工浏览点击页面确认功能模式爬虫:解决页面内容异步加载等问题也就有了很多杰出的实现,前端经常使用的莫过于 PhantomJS 和 selenium-webdriver&…

尽梨了(贪心+dp)

尽梨了problemsolutioncodeproblem 丰之崎学园附近共有 nnn 个商店,在时刻 000 时,英梨梨从学园出发开始购物。 从学园走到任意一个商店,或从一个商店走到另一个商店需要 111 单位时间。 如果英梨梨在时刻 ttt 到达了商店 iii &#xff0c…

CF1612G Max Sum Array

解析 被蓝题虐了。(悲 确实不太难,就是没往那边想。 考虑如果某个值的下标分别位 i1,i2,...,ini_1,i_2,...,i_ni1​,i2​,...,in​ 那么如何计算贡献。 每一个下标和前面统计时作为被减数,和后面统计时作为减数,所以 iki_kik​ …

【Acwing 219. 剪纸游戏】

【Acwing 219. 剪纸游戏】 题意: 给定一张 NM 的矩形网格纸,两名玩家轮流行动。 在每一次行动中,可以任选一张矩形网格纸,沿着某一行或某一列的格线,把它剪成两部分。 首先剪出 11 的格纸的玩家获胜。 两名玩家都采取…

中国.NET:东莞+长沙.NET俱乐部现场花絮及合肥、苏州、上海等地活动预

《传承有序》与微软技术的发展历程相似,微软俱乐部的发展经历着沉沉浮浮,曾经随着微软走向封闭与固执,.NET社区年轻一代的声音被忽略,.NET社区后继无人。社区的沉默是可怕的,很多社区沉寂消亡。但是在2018年&#xff0…

团不过(dp)

团不过problemsolutioncodeproblem 由比滨结衣和雪之下雪乃在玩 NimNimNim 游戏。 共有 nnn 堆石子,双方轮流操作,每次可以从一堆非空石子堆中取走任意个石 子,取走最后一个石子的人胜利。 她们决定让由比滨结衣先手,但忘记了每…

【AcWing 235. 魔法珠

【AcWing 235. 魔法珠 题意: 有n堆魔法珠,第i堆有ai个,两个人轮流进行以下操作: 当轮到某人操作时,如果每堆中魔法珠的数量均为 1,那么他就输了。 问谁赢谁输 题解: 经典博弈论问题 注意本…

P5039 [SHOI2010]最小生成树(网络流)

解析 我大受震撼。 真的没想到是网络流。(事后诸葛:看几百的数据范围应该试试枚举算法) 一道比较开眼界的题吧。 然而用一个十分钟写完的假做法可以骗90分,还是挺香的 首先是一个没什么意思的转化:操作等价于给一条边…

Abp vNext 切换MySql数据库

Abp vNext是Abp的下一代版本,目前还在经一步完善,代码已经全部重写了,好的东西保留了下来,去除了很多笨重的东西,从官宣来看,Abp vNext主要是为了以后微服务架构而诞生的。从源码来看,Abp vNext…

P1199 [NOIP2010 普及组] 三国游戏

P1199 [NOIP2010 普及组] 三国游戏 题意: 有n个武将,每两个武将之间都有默契值,你和电脑玩游戏,轮流选一个。轮到计算机挑选时,它会尝试将对手军队中的每个武将与当前每个自由武将进行一一配对,找出所有配…

P1791 [国家集训队]人员雇佣(网络流)

解析 熟练和固化在有些时候是等价的。 一个看起来喜闻乐见的模型。 n2n^2n2 信息量你在逗我… 结果是:点数 n2n^2n2 TLE,边数 n2n^2n2 AC。 一种之前所没有见过的打开方式。 还是考虑最小割模型,点 iii 向原点连一条 AiA_iAi​ 的边&#xf…

【网络流专练一】UVA五题(UVA12125,UVA11082,UVA10983,UVA1306,UVA10735)

网络流专练March of the Penguins矩阵解压 Matrix DecompressingBuy one, get the rest freeThe K-League混合图的欧拉回路 Euler Circuit什么破网站,多余空格换行都不能有,还nm不报PE/RE只报WA。 少一行换行也不行,这是什么垃圾文本比较。 …

采用.NET CORE的全异步模式打造一款免费的内网穿透工具--NSmartProxy

什么是NSmartProxy?NSmartProxy是一款免费的内网穿透工具。特点跨平台,客户端和服务端均可运行在MacOS,Linux,Windows系统上;使用方便,配置简单;多端映射,一个NSmart Proxy客户端可以…