Consul+Ocelot+Polly在NetCor

   2023-05-04 12:06:42 3270
核心提示:目录一、简介二、使用Ocelot2.1应用配置2.2路由配置2.3验证2.4Ocelot结合Consul进行服务发现相关文章Consul+Ocelot+Polly在.NetC

Consul+Ocelot+Polly在NetCor

目录

一、简介二、使用Ocelot2.1应用配置2.2路由配置2.3验证2.4Ocelot结合Consul进行服务发现

相关文章

Consul+Ocelot+Polly在.NetCore中使用(.NET5)-Consul服务注册,服务发现

Consul+Ocelot+Polly在.NetCore中使用(.NET5)-网关Ocelot+Consul

回到顶部

一、简介

前一篇Consul中有个问题是,所有客户端都要和Consul进行连接,且直接拿到了所有得服务实例,这就直接把全部得服务实例暴露出来了,所以需要用网关来隔离客户端和服务实例,

所有api请求都从网关进入。

Ocelot作为一个网关应用,主要得功能有路由、请求聚合、服务发现、统一认证、统一鉴权、限流熔断、并内置了负载均衡器等得集成。而且这些功能都只需要简单得配置即可完成。

回到顶部

二、使用Ocelot2.1应用配置

新建一个.NetCore项目作网关应用。

安装NuGet包

Ocelot

Startup.cs中把ConfigureServices(),Configure()里面得代码都去掉,加上Ocelot接管代码。

public void ConfigureServices(IServiceCollection services) { services.AddOcelot(); } // This method gets called by the runtime. Use this method to configure the HTTP request pipeline. public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { app.UseOcelot(); }

这些操作完,程序就再也不是asp感谢原创分享者 core,也不是什么webApi得程序了,就是一个Ocelot网关应用。

2.2路由配置

网关最重要得功能就是路由,根据路由把功能转发到其它应用去,它本身得应用有ip地址,别人可能访问它,但它怎么知道哪个请求转到哪个应用去呢,这些全靠配置。

首先在 Program.cs里得CreateHostBuilder()加入配置文件信息

public static IHostBuilder CreateHostBuilder(string[] args) => Host.CreateDefaultBuilder(args) .ConfigureAppConfiguration(c => { c.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true); }) .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup<Startup>(); });

根目录下增加配置文件ocelot.json。

{ "Routes": [ { //转发到下游服务地址--url变量 "DownstreamPathTemplate": "/api/{url}", //下游http协议 "DownstreamScheme": "http", //负载方式, "LoadBalancerOptions": { "Type": "RoundRobin" // 轮询 }, "DownstreamHostAndPorts": [ { "Host": "172.16.2.9", "Port": 5201 //服务端口 }, //可以多个,自行负载均衡 { "Host": "172.16.2.9", "Port": 5202 //服务端口 }, { "Host": "172.16.2.9", "Port": 5203 //服务端口 } ], //上游地址 "UpstreamPathTemplate": "/T1/{url}", //网关地址--url变量 //冲突得还可以加权重Priority "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ] } ] }

这里得是路由配置,注释说明已经很清楚,假如网关程序启动后得地址为感谢分享172.16.2.9:5200

当访问:感谢分享172.16.2.9:5200/T1/Test/GetName 网关会把请求转发到感谢分享172.16.2.9:5201/T1/Test/GetName,感谢分享172.16.2.9:5202/T1/Test/GetName,感谢分享172.16.2.9:5203/T1/Test/GetName,根据负载算法决定转发规则。

LoadBalancer是来决定负载得算法

LeastConnection:将请求发往最空闲得那个服务器RoundRobin:轮流转发NoLoadBalance:总是发往第壹个请求或者是服务发现

Routes里面可以配多个路由转发。

2.3验证

在前面得Consul注册得程序中(5201,5202,5203端口程序)加入一个接口

[Route("api/[controller]/[action]")] public class TestController : Controller { private IConfiguration _configuration; public TestController(IConfiguration configuration) { _configuration = configuration; } public IActionResult GetName() { string port = _configuration["port"]; return Json(#34;端口:{port},姓名:张三"); } }

启动Ocelot得网关程序,端口为5200

访问地址:感谢分享ip:5200/T1/Test/GetName

刷新一下

可以看到,已经成功转发到上面配置好得路由地址。

2.4Ocelot结合Consul进行服务发现

上面得示例是没有经过Consul得,是直接转发到相应地址,这显示又面临了服务地址管理得问题了,所以需要结束Consul自动发现服务得地址。

把ocelot.json得文件加入consul配置信息

{ "Routes": [ { //转发到下游服务地址--url变量 "DownstreamPathTemplate": "/api/{url}", //下游http协议 "DownstreamScheme": "http", //负载方式, "LoadBalancerOptions": { "Type": "RoundRobin" // 轮询 }, //"DownstreamHostAndPorts": [ // { // "Host": "172.16.2.9", // "Port": 5201 //服务端口 // }, //可以多个,自行负载均衡 // { // "Host": "172.16.2.9", // "Port": 5202 //服务端口 // }, // { // "Host": "172.16.2.9", // "Port": 5203 //服务端口 // } //], //上游地址 "UpstreamPathTemplate": "/T1/{url}", //网关地址--url变量 //冲突得还可以加权重Priority "UpstreamHttpMethod": [ "GET", "POST", "DELETE", "PUT" ], "UseServiceDisConvery": true, //使用服务发现 "ServiceName": "api"//Consul服务名称 } ], "GlobalConfiguration": { //Ocelot应用地址 "baseUrl": "感谢分享172.16.2.9:5200", "ServiceDiscoveryProvider": { //Consul地址 "Host": "172.16.2.84", //Consul端口 "Port": 8500, "Type": "Consul"//由Consul提供服务发现,每次请求Consul } } }

可以看到,这里已经把写死得下游地址去掉了,加入了Consul得信息。

安装NuGet包

Ocelot.Provider.Consul

Startup.cs中ConfigureServices(IServiceCollection services)加入.AddConsul();

public void ConfigureServices(IServiceCollection services) { services.AddOcelot() .AddConsul(); }

配置完成,验证效果,启动项目。

再次访问感谢分享ip:5200/T1/Test/GetName

刷新一下

控制台信息

到这就已经成功完成 Ocelot+Consul得网关和服务发现功能了。

原文地址:感谢分享特别cnblogs感谢原创分享者/wei325/p/15304951.html

 
举报收藏 0打赏 0评论 0
 
更多>同类百科头条
推荐图文
推荐百科头条
最新发布
点击排行
推荐产品
网站首页  |  公司简介  |  意见建议  |  法律申明  |  隐私政策  |  广告投放  |  如何免费信息发布?  |  如何开通福步贸易网VIP?  |  VIP会员能享受到什么服务?  |  怎样让客户第一时间找到您的商铺?  |  如何推荐产品到自己商铺的首页?  |  网站地图  |  排名推广  |  广告服务  |  积分换礼  |  网站留言  |  RSS订阅  |  违规举报  |  粤ICP备15082249号-2