ASP.NET Core3.1 Ocelot负载均衡的实现_实用技巧

来源:脚本之家  责任编辑:小易  

ASP.net mvc5和asp.net.core有什么区别呢,前景如何:区别:asp.net mvc5只能运行在Windows,一般通过IIS发布。asp.net core开源,可跨平台,能够发布到Linux等系统上。asp.net core做了很多的整合工作,目前来说完成了最基本的一部分类库的迁移。前景:asp.net core肯定是以后的一种潮流,随着docker等技术的普及,跨平台的重要性凸显,必须要使用asp.net core编写的接口才能发布到linux中,也就是asp.net core编写的接口可以做成docker的镜像发布,而asp.net mvc5不能。所以最终肯定是会慢慢都转移到asp.net core上来。但是这需要一个比较久的过程。因为从asp.net mvc5转移到asp.net core需要一定时间的学习,即使在国外也需要一定过程。而国内由于语言环境、开发工具(需要VS2015才能进行asp.net core的开发)等的原因,肯定需要更久。国内的技术一直以来也比较保守。如果单纯的以在国内找个开发的工作的话,建议先熟悉下asp.net mvc5。如果确实有跨平台的需求,或者团队成员都对新技术有很高的热情,从事的也是全新的项目的话,就使用asp.net core。.net core:.NET Core 是.NET Framework的新一代版本,是微软开发的第一个官方版本,具有跨平台 (Windows、Mac OSX、Linux) 能力的应用程序开发框架 (Application Framework),未来也将会支持 FreeBSD 与 Alpine 平台,也是微软在一开始发展时就开源的软件平台[1]  ,它经常也会拿来和现有的开源 .NET 平台 Mono 比较。由于 .NET Core 的开发目标是跨平台的 .NET 平台,因此 .NET Core 会包含 .NET Framework 的类库,但与 .NET Framework 不同的是 .NET Core 采用包化 (Packages) 的管理方式,应用程序只需要获取需要的组件即可,与 .NET Framework 大包式安装的作法截然不同,同时各包亦有独立的版本线 (Version line),不再硬性要求应用程序跟随主线版本。参考资料百度百科.百度百科[引用时间2018-1-4]www.zgxue.com防采集请勿采集本网。

1.负载均衡

新框架没用过,.Net Core 2.0感觉应该是支持的。这里有一篇帖子,你可以参考一下。www.bamn.cn/course/volume/3991 实在不行你就转url吧,就像检测用户一样,凡是没有访问权

Ocelot可以在每个路由的可用下游服务中实现负载均衡,这使我们更有效地选择下游服务来处理请求。负载均衡类型:

不支持,core 最低是 net 4.6 以上的版本 如果使用 core 请考虑使用WIN10开发

LeastConnection:根据服务正在处理请求量的情况来决定哪个服务来处理新请求,即将新请求发送到具有最少现有请求的服务去处理。算法状态没有分布在Ocelot集群中。 RoundRobin:遍历可用服务并发送请求。算法状态没有分布在Ocelot集群中。 NoLoadBalancer:从配置或服务发现中获取第一个可用服务来处理新请求。 CookieStickySessions:通过使用Cookie,确保特定的请求能够被分配到特定的服务上进行处理。

在默认 ASP.NET Core 模板中为 Visual Studio 2015 及更新版本提供的 ASP.NET Web 工具扩展中涵盖的漏洞 同时还包括微软最新网页 Kestrel .NET Core 和 ASP.NET Core 支

Ocelot负载均衡项目示例中,通过网关项目的路由LoadBalancerOptions选项可以配置负载均衡类型:

1、CORS的原理:CORS定义一种跨域访问的机制,可以让AJAX实现跨域访问。CORS 允许一个域上的网络应用向另一个域提交跨域 AJAX 请求。实现此功能非常简单,只需由

{ "Routes": [ { //下游路由服务地址 "DownstreamPathTemplate": "/api/values", //下游服务地址访问协议类型http或者https "DownstreamScheme": "http", //下游服务的主机和端口 "DownstreamHostAndPorts": [ { "Host": "localhost", "Port": 9001 }, { "Host": "localhost", "Port": 9002 } ], //上游服务地址,即下游服务真实访问地址 "UpstreamPathTemplate": "/", //负载均衡类型:轮询 "LoadBalancerOptions": { "Type": "RoundRobin" }, //上游服务HTTP请求方式,例如Get、Post "UpstreamHttpMethod": [ "Get" ] } ]}

Foundation(WPF)并不包含在.NET Core中。从技术上讲,.NET Core仅支持控制台应用程序。ASP.NET Core和UWP是以.NET Core为基础构建的应用程序模型。NET Standard

新请求通过上游访问下游服务的时候,Ocelot会根据LoadBalancerOptions负载均衡选项类型来分发到具体下游服务。

dll文件一般被存放在C:\\Windows\\System目录下。电脑系统文件因经常会受到病毒的侵扰,导致系统文件、dll文件等丢失、损坏,一些包括游戏在内的应用程序无法启动。 解决

2.服务发现

用Session传参。。

下面展示如何使用服务发现来设置路由:

那么你将会认识到 ASP.NET Core 有多完美,这感觉起来就像从古典的 ASP 时代来到全新的 ASP.NET 的世界。 现在,让我们来一探究竟 下面列出 ASP.NET Core 1.0 的核心变

{ "DownstreamPathTemplate": "/api/posts/{postId}", "DownstreamScheme": "https", "UpstreamPathTemplate": "/posts/{postId}", "UpstreamHttpMethod": [ "Put" ], "ServiceName": "product", "LoadBalancerOptions": { "Type": "LeastConnection" }}

你可以在 OSX 和 Linux上运行 ASP.NET Core 应用,这对于 ASP.NET 来说,这具有跨时代的意义,也给 ASP.NET 开发者和设计师们带来了全新的体验。ASP.NET Core 具有两个

设置此选项后,Ocelot将从服务发现提供程序中查找下游主机和端口,并在所有可用服务中进行负载平衡请求。如果您从服务发现提供者(领事)中添加和删除服务,Ocelot会停止调用已删除的服务,并开始调用已添加的服务。后续学习服务发现这块知识点时候会重新再讲解。

因为微软没有击败Flash。 有趣的是,Visual Studio安装程序对新家庭成员.Net Core十分重视。当选择构建ASP.Net Web应用程序或想使用容器跨平台应用程序时,.Net Core是将

3.项目演示

现在有 WebUtility.UrlDecode() 与 Microsoft.AspNetCore.Http.HttpContext Microsoft.AspNetCore新的对象没有我们常用HttpUtility.UrlDecode这个方法,将URL 中传输而编码的字

3.1APIGateway项目

该项目通过LoadBalancerOptions配置选项定义服务负载均衡请求机制,事例项目使用的负载均衡类型是RoundRobin,在Program添加Ocelot支持代码如下:

public static IWebHostBuilder CreateWebHostBuilder(string[] args) => WebHost.CreateDefaultBuilder(args) //.UseStartup<Startup>() .UseUrls("http://*:9000") .ConfigureAppConfiguration((hostingContext, config) => { config.SetBasePath(hostingContext.HostingEnvironment.ContentRootPath) //添加Ocelot配置文件.AddJsonFile("configuration.json") .AddEnvironmentVariables(); }) .ConfigureServices(s => { //添加Ocelot服务; s.AddOcelot(); }) .Configure(a => {    //使用Ocelot a.UseOcelot().Wait(); });

3.2APIServicesA和APIServicesB下游服务项目

APIServicesA和APIServicesB项目分别新建两个GET请求方法,代码分别如下:

//APIServicesA[Route("api/[controller]")]public class ValuesController : Controller{ // GET api/values [HttpGet] public string Get() { return "From APIServiceA"; }}//APIServicesB[Route("api/[controller]")]public class ValuesController : Controller{ // GET api/values [HttpGet] public string Get() { return "From APIServiceB"; } }

通过dotnet run命令启动APIGateway项目(网关层)

dotnet run --project APIGateway项目路径\APIGateway.csproj

通过dotnet run命令启动APIServicesA项目

dotnet run --project APIGateway项目路径\APIGateway.csproj

通过dotnet run命令启动APIServicesB项目

dotnet run --project APIServicesB项目路径\APIServicesB.csproj

通过浏览器查看轮询分发给下游服务返回的结果:

负载均衡轮询分发下游服务成功。

4.自定义负载均衡

Ocelot支持自定义负载均衡的方法。自定义负载均衡的类需要继承ILoadBalancer接口类,下面我们定义一个简单的负载均衡循环输出下游服务的示例:

public class CustomLoadBalancer : ILoadBalancer{ private readonly Func<Task<List<Service>>> _services; private readonly object _lock = new object(); private int _last; public CustomLoadBalancer(Func<Task<List<Service>>> services) { _services = services; } public async Task<Response<ServiceHostAndPort>> Lease(HttpContext httpContext) { 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中注册此类:

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

最后在路由的LoadBalancerOptions配置选项上修改为CustomLoadBalancer自定义负载均衡类名:

"LoadBalancerOptions": { "Type": "CustomLoadBalancer"}

运行项目调试查看结果:

第一次请求时候分发到APIServicesA项目。

第二次请求时候分发到APIServicesB项目。

从上面结果来看,自定义负载均衡成功。

参考文献:

Ocelot官网

到此这篇关于ASP.NET Core3.1 Ocelot负载均衡的实现的文章就介绍到这了,更多相关ASP.NET Core3.1 Ocelot负载均衡内容请搜索真格学网以前的文章或继续浏览下面的相关文章希望大家以后多多支持真格学网! 您可能感兴趣的文章:ASP.NET Core3.1 Ocelot认证的实现ASP.NET Core3.1 Ocelot路由的实现

asp.net mvc5只能运行在Windows,一般通过IIS发布;asp.net core开源,可跨平台,能够发布到Linux等系统上。asp.net core做了很多的整合工作,目前来说完成了最基本的一部分类库的迁移。从前景上来说,asp.net core肯定是以后的一种潮流,随着docker等技术的普及,跨平台的重要性凸显,必须要使用asp.net core编写的接口才能发布到linux中,也就是asp.net core编写的接口可以做成docker的镜像发布,而asp.net mvc5不能。所以最终肯定是会慢慢都转移到asp.net core上来。但是这需要一个比较久的过程。因为从asp.net mvc5转移到asp.net core需要一定时间的学习,即使在国外也需要一定过程。而国内由于语言环境、开发工具(需要VS2015才能进行asp.net core的开发)等的原因,肯定需要更久。国内的技术一直以来也比较保守。如果单纯的以在国内找个开发的工作的话,建议先熟悉下asp.net mvc5。如果确实有跨平台的需求,或者团队成员都对新技术有很高的热情,从事的也是全新的项目的话,就使用asp.net core吧内容来自www.zgxue.com请勿采集。


  • 本文相关:
  • 基于asp.net的lucene.net全文搜索实现步骤
  • aspx/asp.net 防注入程序 v1.0
  • 用扩展方法优化多条件查询(不定条件查询)
  • .net core webapi中如何实现多态数据绑定实例代码
  • asp.net core下给网站做安全设置的方法详解
  • asp.net mvc基础
  • asp.net下获取excel所有的工作表名称
  • sql事务应用积累
  • .net mvc页面ui之jquery博客日历控件实现代码
  • asp.net mvc signalr简单聊天室制作过程分析
  • 请问:ASP.net mvc5和asp.net.core有什么区别呢?在今后的发展...
  • ASP.net mvc5和asp.net.core有什么区别呢?前景如何?
  • 如何评价asp.net core
  • 如何在ASP NET Core中实现CORS跨域
  • Asp.Net Core 设置 .html 页为起始页
  • xp支持asp.net core2.0么
  • 微软BUG Bounty悬赏项目扩展至.NET Core和ASP.NET Core
  • 如何在ASP NET Core中实现CORS跨域
  • netstandard和.netcore的区别
  • microsoft.aspnetcore.http 在哪个dll中
  • asp c# .net 通过onclick="window.rightbar.location.href='../c...
  • net core 是最新的.net版本吗
  • 如何查看 net core版本
  • Net 框架和.Net Core,我该用哪个?怎么选
  • .net core里面用什么代替System.Web.Service
  • 未来.net core 是什么样
  • 网站首页网页制作脚本下载服务器操作系统网站运营平面设计媒体动画电脑基础硬件教程网络安全基础应用实用技巧自学过程首页asp.net实用技巧asp.net core3.1 ocelot认证的实现asp.net core3.1 ocelot路由的实现基于asp.net的lucene.net全文搜索实现步骤aspx/asp.net 防注入程序 v1.0用扩展方法优化多条件查询(不定条件查询).net core webapi中如何实现多态数据绑定实例代码asp.net core下给网站做安全设置的方法详解asp.net mvc基础asp.net下获取excel所有的工作表名称sql事务应用积累.net mvc页面ui之jquery博客日历控件实现代码asp.net mvc signalr简单聊天室制作过程分析未将对象引用设置到对象的实例 (java正则表达式 pattern和matcheasp.net(c#)网页跳转七种方法小结未能加载文件或程序集“xxx”或它asp.net“服务器应用程序不可用”asp.net中的几种弹出框提示基本实asp.net gridview 72般绝技asp.net生成excel并导出下载五种asp.net对路径"xxxxx"asp.net汉字转拼音和获取汉字首字dropdownlist绑定选择数据报错提示异常解asp.net post方式获取数据流的一种简单写.net连接mysql封装类代码 可直接调用asp.net 网站开发中常用到的广告效果代码asp.net mvc5实现文件上传与地址变化处理.net core中使用httpclient的正确姿势.net判断一个对象是否为数值类型实例codefirst从零开始搭建asp.net core2.0网详解.net单元测试方法asp.net mvc5网站开发概述(一)
    免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2017 www.zgxue.com All Rights Reserved