tnblog
首页
视频
资源
登录

.netCore3.0 Ocelot 制作简单负载均衡 (一)

8292人阅读 2020/2/10 14:34 总访问:3467410 评论:0 收藏:0 手机
分类: .net后台框架

开发环境


环境版本:vs2019 

框架版本:.netCore 3.0

注意:.netCore 3.1 Ocelot 暂时不支持我这种方式!


1.项目创建


创建的项目结构如上所示

注意创建本次项目时是使用的是http

(1) 给OcelotDemo网关项目添加Ocelot包以及配置文件

首先给OcelotDemo添加Nuget包,可以右键“管理Nuget”包,然后搜索Ocelot添加,

注意我这里版本为13.8.0,

如下图所示:

也可以通过命令 

  1. Install-Package Ocelot -Version 13.8.5
进行安装。方式随你喜欢。


然后给Demo2项目新建一个json文件,新建的方式就是,右键Demo2项目,然后选择“添加”-》“新建项”,在弹出的窗口里面找到json文件,并写好文件的名字即可,(当然,也可以用快捷键 

  1. Ctrl+Shilt+A
)如下图所示:


当然,你还需要右键你刚刚设置的ocelot.json文件,并设置“复制到输出目录”的属性为“始终复制”如下所示:



接下来,可以按照我写的非常简单的配置进行配置。


  1. {
  2.   "ReRoutes": [
  3.     {
  4.       "DownstreamPathTemplate""/{everything}",
  5.       "DownstreamScheme""http",
  6.       "DownstreamHostAndPorts": [
  7.         {
  8.           "Host""localhost",
  9.           "Port": 1001
  10.         },
  11.         {
  12.           "Host""localhost",
  13.           "Port": 1002
  14.         }
  15.       ],
  16.       "UpstreamPathTemplate""/{everything}",
  17.       "UpstreamHttpMethod": [ "Get""Post" ],
  18.       "LoadBalancerOptions": {
  19.         "Type""RoundRobin"
  20.       }
  21.     }
  22.   ],
  23.   "GlobalConfiguration": {
  24.   }
  25. }


上面配置,有两个节点,分别是ReRoutes数组,以及GlobalConfiguration。这里简单做一下阐述:

keyvalue
ReRoutes告诉Ocelot如何处理上游的请求。
DownstreamPathTemplate下游的路由模板,即真实处理请求的路径模板如:/api/...
DownstreamScheme请求的方式,如:http,htttps
DownstreamHostAndPorts下游的IP以及端口,可以有多个(如果使用负载均衡),方便实现负载均衡,当然你也可以使用服务发现,实现下游服务的自动注册与发现,这篇文章不会讲解。
UpstreamPathTemplate上游请求的模板,即用户真实请求的链接
UpstreamHttpMethod上游请求的http方法,是个数组,你可以写多个。
LoadBalancerOptions

负载均衡选项(DownstreamHostAndPorts有多个的时候才能看到效果),有三种方式

方式描述
LeastConnection将请求发往最空闲的那个服务器
RoundRobin 轮流发送
NoLoadBalance 不启用负载均衡,总是发往第一个请求或者服务发现的那个服务器
GlobalConfiguration顾名思义就是全局配置,此节点的配置允许覆盖ReRoutes里面的配置,你可以在这里进行通用的一些配置信息。


完成json配置后,在Demo2中添加Ocelot支持

首先在Demo2项目的Program.cs中加载上一步我们添加的Ocelot的配置文件,如下所示:

  1. public static IHostBuilder CreateHostBuilder(string[] args) =>
  2.     Host.CreateDefaultBuilder(args)
  3.         .ConfigureAppConfiguration((hostingContext, config) =>
  4.         {
  5.             config
  6.                 .SetBasePath(hostingContext.HostingEnvironment.ContentRootPath)
  7.                 .AddJsonFile("appsettings.json"truetrue)
  8.                 .AddJsonFile($"appsettings.{hostingContext.HostingEnvironment.EnvironmentName}.json"truetrue)
  9.                 .AddJsonFile("ocelot.json")
  10.                 .AddEnvironmentVariables();
  11.         })
  12.         .ConfigureWebHostDefaults(webBuilder =>
  13.         {
  14.             webBuilder.UseStartup<Startup>();
  15.         });


然后,在Startup.cs中,添加Ocelot服务并启用Ocelot中间件,这里你需要在Startup.cs文件中引入下面两个命名空间:

  1. using Ocelot.DependencyInjection;
  2. using Ocelot.Middleware;


ConfigureServices方法中添加

  1. services.AddOcelot();


Configure方法中添加

  1. app.UseOcelot().Wait();


这样我们的Ocelot就算搭建好了

通过ocelot.json配置来看

1.我们需要配置launchsettings.jsonmake

Ocelot 配置为:

  1. {
  2.   "profiles": {
  3.     "Demo2": {
  4.       "commandName""Project",
  5.       "launchBrowser"true,
  6.       "applicationUrl""http://localhost:5000",
  7.       "environmentVariables": {
  8.         "ASPNETCORE_ENVIRONMENT""Development"
  9.       }
  10.     }
  11.   }
  12. }

GoodApi 配置为:

  1. {
  2.   "profiles": {
  3.     "GoodApi": {
  4.       "commandName""Project",
  5.       "launchBrowser"true,
  6.       "launchUrl""weatherforecast",
  7.       "applicationUrl""http://localhost:1001",
  8.       "environmentVariables": {
  9.         "ASPNETCORE_ENVIRONMENT""Development"
  10.       }
  11.     }
  12.   }
  13. }

OrderApi 配置为:

  1. {
  2.   "profiles": {
  3.     "OrderApi": {
  4.       "commandName""Project",
  5.       "launchBrowser"true,
  6.       "launchUrl""weatherforecast",
  7.       "applicationUrl""http://localhost:1002",
  8.       "environmentVariables": {
  9.         "ASPNETCORE_ENVIRONMENT""Development"
  10.       }
  11.     }
  12.   }
  13. }

然后标记一下控制器


Ok!

然后通过三个Powershell通过dotnet来运行,如下图所示:

先来看看两个Api接口

然后通过网关访问达到的结果

总结

本篇文章只是记录了,如何快速的成功的使用ocelot,并进行了简单的配置,配置中又引入了一个负载均衡的策略,最后通过代码进行了相关的实现以及测试!关于其他的一些配置,我会在下面的文章中进行阐述。








欢迎加群讨论技术,1群:677373950(满了,可以加,但通过不了),2群:656732739

评价

Idea下使用maven搭建SSM():SpringMVC

Spring MVC是一款基于MVC架构模式的轻量级Web框架,其目的是将Web开发模块化,对整体架构进行解耦,简化Web开发流程。下面...

DIV+CSS网页布局常用的些基础知识整理

一.文件命名规范全局样式:global.css;框架布局:layout.css;字体样式:font.css;链接样式:link.css;打印样式:print...

如何使用图标像使用文字样,使用文本图标的方法

1.首先在Iconfont-阿里巴巴矢量图标库上面找到你需要的图标然后加入你的购物车然后选择图标;注意:每个类型的图标会大小不...

Python实例 2-12306抢票() 登陆

开坑年关将近,终于对12306下手了,,平安夜撸代码,攻克了12306的登陆 2018-12-24 22:16:00没错 这篇博客就写从零开始的异...

c使用unity实现依赖注入:依赖注入介绍

依赖注入的简单介绍直接关联是这样滴,耦合性超高的。这里有一个设计原则:依赖于抽象,而不是具体的实现试想一下如果做了...

c webservice:基本使用

什么是webserviceWebservie是一种网络服务是一种与语言无关的服务webserver主要作用:1:可以跨平台跨语言访问2:可以做SOA...

c 根据数字把个集合拆分成多个子集合

有时间需要根据一个数子把一个集合拆分成多个子集合后在进行操作,就可以使用下面的代码。List&lt;List&lt;string&gt;&gt;l...

通过url传递个带井号()的参数并正确获取

正常情况下支持通过url是不能传递#等特殊符号的但是可以通过url编码解码解决通过url传递参数时某些特殊符号不能传递的问题n...

干货!div滚动到定位置就固定他。Vue中实现侧滚动到底部就固定

尊重原创:转载请注名出处div滚动到一定位置就固定他,例如左边的内容很多,右边的内容很少,如果不处理滚动到一定位置后右...

些有用的资源分享(工具+电子书)

工具类图片相关工具TinyPNG:https://tinypng.com/ 免费的在线图片压缩工具,压缩率高,无损画质,直接拖拽使用,很方便。p...

直用的"How about",其实是中式英语

ow about...&quot;How about&quot;相信大家都不陌生。比如▼“昨天的电影怎么样?”How about the movie yesterday?×××...

在WEB API中进行统安全验证类DelegatingHandler

根据web api 官方参考文献 总结出一下代码举例:将 HTTP 响应消息的处理委托给另一处理程序(称为“内部处理程序”)的 HTT...

MongoDB 学习(包含各种花样坑)

资源链接:链接:https://pan.baidu.com/s/1xgDnP2aHW1fNN9qLAP7OtQ提取码:4zm81,安装MongoDB (传统式的下一步)这里选Cu...

推荐款三无压缩软件:bandizip

哈喽,大家好,我是刘小贱相信大家作为程序员的一员,都在使用压缩软件,但是呢我们常常使用的压缩软件都有很多的弊端,不但对...

点flex布局的运用

水平分割:html:&lt;divclass=&quot;flex-container&quot;&gt; &lt;divclass=&quot;flex-item&quot;&gt;flexitem1&lt;/div...
这一世以无限游戏为使命!
排名
2
文章
634
粉丝
44
评论
93
docker中Sware集群与service
尘叶心繁 : 想学呀!我教你呀
一个bug让程序员走上法庭 索赔金额达400亿日元
叼着奶瓶逛酒吧 : 所以说做程序员也要懂点法律知识
.net core 塑形资源
剑轩 : 收藏收藏
映射AutoMapper
剑轩 : 好是好,这个对效率影响大不大哇,效率高不高
ASP.NET Core 服务注册生命周期
剑轩 : http://www.tnblog.net/aojiancc2/article/details/167
ICP备案 :渝ICP备18016597号-1
网站信息:2018-2025TNBLOG.NET
技术交流:群号656732739
联系我们:contact@tnblog.net
公网安备:50010702506256
欢迎加群交流技术