.Net Core微服务——网关(1):ocelot集成及介绍
网关是什么
简单来说,网关就是暴露给外部的请求入口。就和门卫一样,外面的人想要进来,必须要经过门卫。当然,网关并不一定是必须的,后端服务通过http也可以很好的向客户端提供服务。但是对于业务复杂、规模庞大的项目来说,使用网关有很多无法舍弃的好处,比如可以进行统一的请求聚合来节省流量、降低耦合度,可以赋予项目熔断限流的能力提高可用性等等。
ocelot是什么
ocelot是.net core实现的开源的api网关项目,开源地址:https://github.com/ThreeMammals/Ocelot
ocelot除了十分契合.net开发者以外,功能强大,包含:路由、认证、请求聚合、限流熔断、服务发现、鉴权,还有内置负载均衡器、Consul集成等等。
当然了,api网关不止这一款,市面上还有kong之类的,随自己喜好就好。
ocelot集成
首先明确一点,网关应该作为独立进程存在。那么我们先新建一个.net core3.1项目,然后添加nuget包:

关于版本,选择当前所能支持的最新版即可。
添加好nuget包以后,需要修改StartUp:
// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
services.AddOcelot();
//services.AddControllers();
} // 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().Wait(); //if (env.IsDevelopment())
//{
// app.UseDeveloperExceptionPage();
//} //app.UseHttpsRedirection(); //app.UseRouting(); //app.UseAuthorization(); //app.UseEndpoints(endpoints =>
//{
// endpoints.MapControllers();
//});
}
这里不要惊讶,因为走了网关就不会再走默认的管道了。UseOcelot().Wait() 表示设置ocelot所有的中间件,而ocelot也提供了很多集成中间件的库,就像这些:

现在,想要让ocelot成功运行,还需要新增配置文件,并在Program新增配置文件的引用:
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration(config =>
{
config.AddJsonFile("ocelotConfig.json", optional: false, reloadOnChange: true);
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
});
配置文件:
{
"Routes": [
{
"DownstreamPathTemplate": "/{url}", //服务地址--url变量
"DownstreamScheme": "http",
"DownstreamHostAndPorts": [
{
"Host": "123.123.123.123",
"Port": 5050 //服务端口
}
],
"UpstreamPathTemplate": "/MJ/{url}", //网关地址--url变量
"UpstreamHttpMethod": [ "Get", "Post" ]
}
]
}
这是一份简单的转发配置,Downstream和Upstream开头的配置项就是下游、上游相关项。这里要说一句,在微服务架构中,客户端——服务端通常理解为上游——下游,这里自行替换一下。
上面的配置文件做了一件事,接收上游请求时,把请求路径中含有【/MJ/所有】的请求转发到IP【http://123.123.123.123:5050/所有】并回传结果,支持http的get、post方法,其实这就是最基本的路由。
来测试一下,启动项目并写好请求路径:

可以看到,ocelot成功把本地请求按照路由规则转发给远程服务器,并回发了结果。一个网关最基本的功能有了。
截图中所请求的远程服务,是我前几篇文章基于consul搭建起来的项目,有兴趣可以去看看。
关于ocelot更高级的应用,比如熔断限流、身份认证等,都是通过配置来完成的,我会整理后发出来,同时也建议仔细阅读官方文档,地址:https://ocelot.readthedocs.io/en/latest/
.Net Core微服务——网关(1):ocelot集成及介绍的更多相关文章
- .NET Core微服务二:Ocelot API网关
.NET Core微服务一:Consul服务中心 .NET Core微服务二:Ocelot API网关 .NET Core微服务三:polly熔断与降级 本文的项目代码,在文章结尾处可以下载. 本文使 ...
- .NET Core微服务之基于Ocelot实现API网关服务
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.啥是API网关? API 网关一般放到微服务的最前端,并且要让API 网关变成由应用所发起的每个请求的入口.这样就可以明显的简化客户端 ...
- .NET Core微服务之基于Ocelot实现API网关服务(续)
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.负载均衡与请求缓存 1.1 负载均衡 为了验证负载均衡,这里我们配置了两个Consul Client节点,其中ClientServic ...
- .NET Core微服务之基于Steeltoe集成Zuul实现统一API网关
Tip: 此篇已加入.NET Core微服务基础系列文章索引,本篇接上一篇<基于Steeltoe使用Eureka实现服务注册与发现>,所演示的示例也是基于上一篇的基础上而扩展的. => ...
- .NET Core微服务之基于Ocelot+Butterfly实现分布式追踪
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.什么是Tracing? 微服务的特点决定了功能模块的部署是分布式的,以往在单应用环境下,所有的业务都在同一个服务器上,如果服务器出现错 ...
- .NET Core微服务之基于Ocelot+IdentityServer实现统一验证与授权
Tip: 此篇已加入.NET Core微服务基础系列文章索引 一.案例结构总览 这里,假设我们有两个客户端(一个Web网站,一个移动App),他们要使用系统,需要通过API网关(这里API网关始终作为 ...
- .Net Core微服务——网关(2):ocelot集成consul
有consul基础的都知道,consul可以发现新增的服务,剔除掉无效的服务,赋予应用自动伸缩的能力.而ocelot如果集成了consul,那ocelot也能拥有这些能力,还可以自主选择负载均衡策略, ...
- .NET Core微服务一:Consul服务中心
本文的项目代码,在文章结尾处可以下载. 防爬虫,本文的网址是:https://www.cnblogs.com/shousiji/p/12253295.html 本文使用的环境:Windows10 64 ...
- springcloud(十)-Zuul微服务网关
为什么要使用微服务网关 前面的文章我们介绍了,Eureka用于服务的注册于发现,Feign支持服务的调用以及均衡负载,Hystrix处理服务的熔断防止故障扩散,Spring Cloud Config服 ...
随机推荐
- 【PHP】保留两位小数并向上取整
问题: 一开始我想着数值*100然后向上取整然后再除以一百 $num = 1000 * 0.9634; echo $num; echo '</br>'; $res = ceil($num ...
- Java基础(六)——集合
一.概述 1.介绍 为什么出现集合? 答:面向对象语言对事物的体现都是以对象的形式,所以为了方便对多个对象的操作,对对象进行存储,集合就是存储对象最常用的一种方式. 数组和集合类同是容器,有何不同? ...
- css颜色字符串转换, 字符串转化为驼峰形式
* 将 rgb 颜色字符串转换为十六进制的形式,如 rgb(255, 255, 255) 转为 #ffffff1. rgb 中每个 , 后面的空格数量不固定2. 十六进制表达式使用六位小写字母3. 如 ...
- 记一次某网站生产环境CPU忽高忽低故障解决过程
感谢 感谢[一级码农] 的帮助,之前也读了大佬的好多文章,一直在学习中,也没有实际操作过. 这次的过程也是在大佬的指点下完成的. 现象描述 从周六上午开始,陆续收到服务器CPU高的报警短信,到下午已经 ...
- 基于深度学习的建筑能耗预测02——安装Tensorflow-gpu
一.检查显卡 ·查看自己的显卡配置是否能支持cuda,以及Tensorflow不同版本要求与CUDA及CUDNN版本对应关系: https://developer.nvidia.com/zh-cn/c ...
- Django整理(三) - 配置文件&静态文件
项目常用配置 在项目的 setting.py 配置文件中,进行项目相关配置的修改. 1. BASE_DIR 当前项目的根目录,Django会依此来定位工程内的相关文件,我们也可以使用该参数来构造文件路 ...
- 在Unity中渲染一个黑洞
在Unity中渲染一个黑洞 前言 N年前观看<星际穿越>时,被其中的"卡冈图雅"黑洞所震撼.制作团队表示这是一个最贴近实际的黑洞效果,因为它是通过各种科学理论实现的.当 ...
- php链接mysql,php链接mysql的常用方法
PHP连接MySQL数据库的几种方法 1.最简单的方式-mysql(面向过程) <?php $con = mysql_connect("localhost","ro ...
- webRTC中语音降噪模块ANS细节详解(一)
ANS(adaptive noise suppression) 是webRTC中音频相关的核心模块之一,为众多公司所使用.从2015年开始,我在几个产品中使用了webRTC的3A(AEC/ANS/AG ...
- Django对表单进行增删改查
查 首先在url中写好路径 其次在后面参数的views里写函数类xxxxxxx的基本逻辑 定义一个函数xxxxxxx,继承request,注意这个request对数据库操作结果都会存放在request ...