华域联盟 .Net ASP.NET Core3.1 Ocelot路由的实现

ASP.NET Core3.1 Ocelot路由的实现

ASP.NET Core3.1 Ocelot路由的实现
 更新时间:2020年11月12日 10:54:06   作者:暗断肠  

这篇文章主要介绍了ASP.NET Core3.1 Ocelot路由的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

1.路由
前一个章节我们已经介绍过Ocelot,相信大家也了解到,Ocelot的主要功能是接收客户端等传入的HTTP请求,并将其转发到下游服务。Ocelot当前仅以另一个http请求的形式支持此功能(将来可能是任何传输机制)。
Ocelot将一个请求路由到另一个请求。为了让Ocelot正常工作,您需要在配置中设置一个Route。下面我们就Ocelot基础项目构建简单介绍下路由功能。
2.Ocelot基础项目构建(APIGatewayBasicDemo)
现在我们根据GitHub贡献者开源项目来学习Ocelot,根据下载下来Ocelot基础项目结构来看,我们能看到有一个网关项目(APIGateway),一个客户API项目(CustomersAPIServices),一个产品API项目(ProductsAPIServices)。如下图所示:

2.1Ocelot网关配置
APIGateway网关项目根目录下面有一个configuration.json配置文件,内容如下:

{
//Routes:处理上游请求的对象(客户端),每个数组{}就是配置:上游地址和对应下游地址
"Routes": [
{
//以Downstream开头的,是要转发到下游服务器的地址(CustomersAPIServices),与nginx转发类似
//下面所有Downstream开头的,组成一个转发url,转发地址是localhost:9001/api/customers
"DownstreamPathTemplate": "/api/customers",
"DownstreamScheme": "http",
// "DownstreamHost": "localhost",
// "DownstreamPort": 9001,
//转发到下游服务器的主机和端口。
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9001
}
],
//Upstream开头是指上游服务器(客户端)访问地址,通过http get方式访问。
//也就是说客户端访问localhost:9000/customers 实际是转发到了localhost:9001/api/customers的服务
"UpstreamPathTemplate": "/customers",
"UpstreamHttpMethod": [ "Get" ] },
{
"DownstreamPathTemplate": "/api/customers/{id}",
"DownstreamScheme": "http",
// "DownstreamHost": "localhost",
// "DownstreamPort": 9001,
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9001
}
],
"UpstreamPathTemplate": "/customers/{id}",
"UpstreamHttpMethod": [ "Get" ] },
{
"DownstreamPathTemplate": "/api/products",
"DownstreamScheme": "http",
// "DownstreamPort": 9002,
// "DownstreamHost": "localhost",
"DownstreamHostAndPorts": [
{
"Host": "localhost",
"Port": 9002
}
],
"UpstreamPathTemplate": "/products",
"UpstreamHttpMethod": [ "Get" ] }
],
//全局配置,允许覆盖Routes特定设置
"GlobalConfiguration": {
"RequestIdKey": "OcRequestId",
"AdministrationPath": "/administration"
}
}

下面我们就文件中这些属性进行解释:
DownstreamPathTemplate:下游路由服务地址。
DownstreamScheme:下游服务地址访问协议类型http或者https。
DownstreamHostAndPorts:是一个数据集合,用于定义您希望将请求转发到的任何下游服务的主机和端口。通常,它仅包含一个条目,但是有时您可能希望对下游服务进行负载均衡请求,Ocelot允许您添加多个条目,然后选择一个负载均衡器。
UpstreamPathTemplate:上游服务地址,即下游服务真实访问地址。
UpstreamHttpMethod:上游服务HTTP请求方式,例如Get、Post。
GlobalConfiguration:顾名思义就是全局配置,此节点的配置允许覆盖Routes里面的配置,你可以在这里进行通用的一些配置信息。
在Ocelot中,您可以以{something}的形式将变量的占位符添加到模板中。占位符变量需要同时存在于DownstreamPathTemplate和UpstreamPathTemplate属性中。当设置为Ocelot时,Ocelot将尝试为每个请求Ocelot进程将UpstreamPathTemplate占位符中的值替换为DownstreamPathTemplate。例如上述/customers/{id}。
2.2网关项目中添加Ocelot支持
现在我们在网关项目中添加Ocelot支持,代码如下:

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

Ocelot的配置如上代码基本完成了,下面我们看看一个基础Ocelot路由正常工作流程。
2.3CustomersAPIServices和ProductsAPIServices项目
CustomersAPIServices项目的CustomersController有如下两个方法:

[Route("api/[controller]")] public class CustomersController : Controller
{
[HttpGet] public IEnumerable<string> Get()
{
return new string[] { "Catcher Wong", "James Li" };
}

[HttpGet("{id}")] public string Get(int id)
{
return $"Catcher Wong - {id}";
}
}

ProductsAPIServices项目的ProductsController有如下一个方法:

[Route("api/[controller]")] public class ProductsController : Controller
{
[HttpGet] public IEnumerable<string> Get()
{
return new string[] { "Surface Book 2", "Mac Book Pro" };
}
}

2.4运行测试
上面这三个下游路由地址根据configuration.json配置文件都分别配置了上游分发地址,我们把这三个项目根据配置信息分别在IIS上部署起来,当然你们也可以使用dotnet run命令分别启动这个三个项目。APIGateway、CustomersAPIServices、ProductsAPIServices项目绑定主机地址分别是localhost:9000、localhost:9001、localhost:9002。
当我们在浏览器上打开localhost:9000/customers时候,会发现浏览器上输出如下信息:

为什么输入网关主机地址,返回过来却是客户主机处理结果?那是因为当客户端访问上游服务localhost:9000/customers时候,Ocelot会根据配置信息中下游模版把请求分发到localhost:9001/api/Customers/Get去处理,然后返回结果。
而当我们打开localhost:9000/customers/1时候,也会输出如下信息:

配置信息中上游模版/customers/{id}对应下游模版/api/customers/{id},当我们请求的路径为localhost:9000/customers/1时候,Ocelot会根据配置信息分发到对应的下游路由localhost:9001/api/Customers/Get/1去处理,然后返回结果。
同理,当客户端访问上游服务localhost:9000/products时候,Ocelot也会分发到对应的下游路由localhost:9002/api/Products去处理,然后返回结果:

根据上面测试结果,也就是说我们的Ocelot已经在起作用了,而且根据上下游路由进行了映射。当然该章节也只是简单介绍Ocelot路由功能,而configuration.json配置中有些属性还没有进行描述,例如负载均衡、限流,熔断等等。下面我会继续根据GitHub贡献者开源项目继续讲解其功能。

参考文献:
Ocelot官网
到此这篇关于ASP.NET Core3.1 Ocelot路由的实现的文章就介绍到这了,更多相关ASP.NET Core Ocelot路由内容请搜索华域联盟以前的文章或继续浏览下面的相关文章希望大家以后多多支持华域联盟!

您可能感兴趣的文章:详解ASP.NET Core端点路由的作用原理ASP.NET Core3.X 终端中间件转换为端点路由运行详解ASP.NET Core MVC学习教程之路由(Routing)asp.net Core3.0区域与路由配置的方法ASP.NET Core 2.2中的Endpoint路由详解ASP.NET Core中自定义路由约束的实现asp.net core webapi项目配置全局路由的方法示例详解ASP.NET Core 2.0 路由引擎之网址生成(译)ASP.NET Core自动生成小写破折号路由的实现方法

ASP.NET
Core
Ocelot
路由

相关文章
asp.net发邮件的几种方法汇总.net中发送邮件方法有很多,如MailMessage,SmtpMail等下面我来给大家利用这些方法来实现在.net中邮件发送吧,希望此方法对各位同学会有所帮助 2014-01-01
.Net Core如何对MongoDB执行多条件查询这篇文章主要介绍了.Net Core如何对MongoDB执行多条件查询,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下 2020-07-07
IIS实现反向代理时Cookie域的设置方法这篇文章主要给大家介绍了关于IIS实现反向代理时Cookie域的设置方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧。 2018-04-04
asp.net Repeater 自增asp.net Repeater 自增加实现代码。 2009-06-06
将Access数据库中数据导入到SQL Server中的详细方法实例将Access数据库中数据导入到SQL Server中的详细方法实例,需要的朋友可以参考一下 2013-03-03
ASP.NET中Application和Cache的区别分析在asp.net中储存数据的方式有很多,包括application,session,cache, cookie, viewstate。其中application和cache的应用范围,使用方式都比较相似,这里主要对比一下这两种方式。 2010-03-03
Asp.Net获取网站截图的实例代码这篇文章介绍了Asp.Net获取网站截图的实例代码,有需要的朋友可以参考一下 2013-07-07
asp.net的web页面(aspx)数据量过多时提交失败对策asp.net的web页面,数据量过多时提交失败的情况想必有很多朋友都有遇到过吧,下面与大家分享下详细的解决方法 2013-05-05
.net获取本机公网IP地址示例本文主要介绍了.net获取本机公网IP地址的方法,使用了ip138的数据,大家参考使用吧 2014-01-01
.NET Core应用类型(Portable apps & Self-contained apps)这篇文章主要介绍了.NET Core应用类型,通常类型用来描述一个特定的执行模型或者基于此的应用,具有一定的参考价值,感兴趣的小伙伴们可以参考一下 2017-04-04

最新评论

本文由 华域联盟 原创撰写:华域联盟 » ASP.NET Core3.1 Ocelot路由的实现

转载请保留出处和原文链接:https://www.cnhackhy.com/5028.htm

本文来自网络,不代表华域联盟立场,转载请注明出处。

作者:

发表回复

联系我们

联系我们

2551209778

在线咨询: QQ交谈

邮箱: [email protected]

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

关注微博
返回顶部