专科网站开发就业方向,网站优化建设南昌,北京到安阳大巴车几个小时,国家批准做新闻的网站本系列相关文章#xff1a;《ASP.NET Core中Ocelot的使用#xff1a;API网关的应用》《ASP.NET Core中Ocelot的使用#xff1a;基于Spring Clound Netflix Eureka的动态路由》本文将基于前两篇文章所述内容#xff0c;继续介绍如何在服务发现和动态路由的基础上#xff0c… 本系列相关文章《ASP.NET Core中Ocelot的使用API网关的应用》《ASP.NET Core中Ocelot的使用基于Spring Clound Netflix Eureka的动态路由》本文将基于前两篇文章所述内容继续介绍如何在服务发现和动态路由的基础上使用Ocelot实现负载均衡。Ocelot本身是带有负载均衡功能的这一点其实跟Nginx提供的HTTP load balancer是类似的功能我觉得整个Ocelot提供的功能通过Nginx也都可以实现不过Ocelot更加.NET化对于.NET开发人员来说更为简单和容易接受。根据官方文档Ocelot支持如下几种负载均衡策略LeastConnection根据服务当前正在处理的请求个数来决定将使用哪个服务来处理新接收到的请求将请求转发给当前连接数最少的服务RoundRobin经典模式轮询法逐个选择可用的服务来处理接收到的请求NoLoadBalancer仅使用第一个可用的服务来处理接收到的请求CookieStickySessions通过使用Cookie确保特定的请求能够被分配到特定的服务上进行处理今天我们选择RoundRobin来看看如何基于服务发现来实现负载均衡。同样首先需要对架构进行调整。调整架构与上文中的架构相比这里不会引入新的服务而相比之下会让两个A服务的实例同时运行。调整后的架构如下图所示整个API的调用过程如下A服务的两个实例、B服务以及API网关在启动的时候均向Spring Cloud Eureka注册自己API用户通过访问Eureka获得API网关的地址API用户使用获得的API网关地址发送一个查询A服务的请求API网关根据指定的A服务的名称从Eureka查询A服务所注册的服务实例API网关根据设定的负载均衡策略向找到的服务实例发出请求并将调用结果反馈给API用户可以看到前面部分的调用过程与上文所述都是非常类似的不同的仅有API网关在寻找A服务的实例这个部分前面是直接获得访问地址而此处则通过负载均衡来选择一个地址。接下来我们看看如何改变我们的代码来实现这个架构。代码修改这里的代码修改会基于上文结尾时的代码也就是实现了Ocelot的动态路由。首先我们在计算服务也就是A服务中增加一个API用以返回当前设置在主机上的machineName环境变量如果设置为空那么就直接返回主机机器名12345678910[Route(api/[controller])][ApiController]public class ValuesController : ControllerBase{ [HttpGet(info)] public ActionResultstring Info() Environment.GetEnvironmentVariable(machineName) ?? Environment.MachineName; // 其它代码省略}然后就是配置Ocelot使其能够实现负载均衡1234567891011121314151617181920{ ReRoutes: [ ], GlobalConfiguration: { RequestIdKey: OcRequestId, AdministrationPath: /administration, ServiceDiscoveryProvider: { Host: localhost, Port: 8761, Type: Eureka, Token: null, ConfigurationKey: null }, LoadBalancerOptions: { Type: RoundRobin }, DownstreamScheme: http }}只需注意上面的LoadBalancerOptions部分这里我们采用了RoundRobin模式这个配置文件的其它部分都与之前的一样没有区别。好了代码改好了。什么就改好了对的就是这么简单接下来让我们测试一下。先在Eclipse里启动Spring Cloud Eureka然后进入CalcService的编译输出目录首先设置machineName环境变量然后用下面的命令启动服务用同样的命令再启动另一个CalcService的实例OK两个CalcService的实例已经启动分别侦听49814和49815两个端口接下来启动我们的Ocelot API网关。等Ocelot API网关启动之后查看Eureka的服务注册可以看到所有的服务已经就绪请注意对于CALC这个应用程序我们可以看到有两个实例已经注册成功。然后我们通过访问API网关进而访问刚刚新加的Info API可以看到服务调用成功。然后按F5刷新可见返回的结果会在CalcService-1与CalcService-2之间来回切换也就意味着我们的请求被依次分配到两个不同的Calc服务的实例上执行。动图为证由此可见我们已经实现了基于Ocelot API网关的负载均衡。当然我们可以继续修改ASP.NET Core MVC的前端页面让它能够直观地显示这个效果。这里也就不贴代码了大家可以按本文后面的源代码链接下载源码自己研究。解决方案容器化同样我们可以把整个解决方案容器化与上一篇文章所述的容器化有区别的一点是对于CalcService的Dockerfile我们要扩充它的EXPOSE的端口范围原来是写死的49814现在让它能够曝露从49800到49899的所有端口以便新的服务可以通过不同的端口接收请求。此外还需要在docker-compose.yml中增加另一个Calc服务的配置详细可以仿照docker-compose.yml中已有的服务配置信息这里也不多啰嗦了源代码库中有完整的内容供参考。完成这些配置之后可以直接用docker-compose一次性启动所有服务然后看看我们的API页面其中的“计算服务名称”会随着页面的刷新动态改变总结本文对前文的案例做了一些简单的调整实现了基于Ocelot API网关的负载均衡。其实负载均衡还可以实现在某个微服务的多个实例的层面然后将这个层面的负载均衡器地址注册到Eureka上也是可以的。这样的架构能够更好地控制每个服务的伸缩并对其进行监控。接下来的文章中我会继续尝试基于微服务的一些部署拓扑以及在云中如何运行我们的微服务架构。源代码的使用请访问https://github.com/daxnet/ocelot-sample/releases/tag/chapter_3下载本文相关案例的源代码。相关文章AspNetCore中使用Ocelot之 IdentityServer4Ocelot-基于.NET Core的开源网关实现.NET Core微服务之基于OcelotIdentityServer实现统一验证与授权Swagger如何访问Ocelot中带权限验证的APIOcelot.JwtAuthorize一个基于网关的Jwt验证包.NET Core微服务之基于Ocelot实现API网关服务.NET Core微服务之基于Ocelot实现API网关服务续.NET微服务体系结构中为什么使用Ocelot实现API网关Ocelot简易教程一之Ocelot是什么Ocelot简易教程二之快速开始1Ocelot简易教程二之快速开始2Ocelot简易教程三之主要特性及路由详解Ocelot简易教程四之请求聚合以及服务发现Ocelot简易教程五之集成IdentityServer认证以及授权Ocelot简易教程六之重写配置文件存储方式并优化响应数据Ocelot简易教程七之配置文件数据库存储插件源码解析ASP.NET Core中Ocelot的使用API网关的应用ASP.NET Core中Ocelot的使用基于Spring Cloud Netflix Eureka的动态路由原文地址: http://sunnycoding.cn/2018/11/06/aspnetcore-ocelot-service-discovery-load-balancing/.NET社区新闻深度好文欢迎访问公众号文章汇总 http://www.csharpkit.com