日志

Ocelot一个优秀的.NET API网关框架

 来源    2021-01-14    1  

1 什么是Ocelot?

Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请求聚合、服务发现、认证、鉴权、限流熔断、并内置了负载均衡器与Service Fabric、Butterfly Tracing集成。

2 如何使用Ocelot?

首先,创建2个WebApi项目,WebApi01和WebApi02,地址分别https://localhost:44313和https://localhost:44390,其中WebApi01当作网关,WebApi02当作具体的微服务Api。

dotnet add package AutoMapper
dotnet add package AutoMapper.Extensions.Microsoft.DependencyInjection

然后,将Ocelot的NuGet软件包安装到WebApi01项目中。

Ocelot

注意我这里安装的是17.0.0版本,配置方面会有点不一样。

接着,在Startup.ConfigureServices中增加services.AddOcelot;

public void ConfigureServices(IServiceCollection services)
{
    services.AddControllers();
    services.AddSwaggerGen(c =>
    {
        c.SwaggerDoc("v1", new OpenApiInfo { Title = "Autofac.WebApi", Version = "v1" });
    });

    services.AddOcelot();
}

接着,在Startup.Configure中增加app.UseOcelot().Wait();

public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseSwagger();
        app.UseSwaggerUI(c => c.SwaggerEndpoint("/swagger/v1/swagger.json", "Ocelot.WebApi01 v1"));
    }

    app.UseHttpsRedirection();

    app.UseRouting();

    app.UseAuthorization();

    app.UseEndpoints(endpoints =>
    {
        endpoints.MapControllers();
    });

    app.UseOcelot().Wait();
}

接着,创建ocelot.json文件

{
  "Routes": [ //路由配置(注16.1版本将ReRoutes换成Routes)
    {
      "DownstreamPathTemplate": "/{url}", // 下游(服务提供方)服务路由模板
      "DownstreamScheme": "https", // 下游Uri方案,http、https
      "DownstreamHostAndPorts": [ // 服务地址和端口,如果是集群就设置多个
        {
          "Host": "localhost",
          "Port": 44390
        }
      ],
      "UpstreamPathTemplate": "/api/{url}", // 上游(客户端,服务消费方)请求路由模板
      "UpstreamHttpMethod": [ "GET" ] // 允许的上游HTTP请求方法,可以写多个
    }
  ],
  "GlobalConfiguration": { //全局配置
    "BaseUrl": "https://localhost:44313" //网关对外地址
  }
}

最后,在Program.CreateHostBuilder中增加AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

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

Ok,让我们来测试看看,https://localhost:44313/api/WeatherForecast会不会跳转https://localhost:44390/WeatherForecast。

借助腾讯云的云函数实现一个极简的API网关
日志借助腾讯云的云函数实现一个极简的API网关 Intro 微信小程序的域名需要备案,但是没有大陆的服务器,而且觉得备案有些繁琐,起初做的小程序都有点想要放弃了,后来了解到腾讯云的云函数,于是利用腾讯云的 ...
2
amazon-web-services – 如何使用terraform在启用了cloudwatch指标的API网关中创建一个舞台?
问答我想在启用了cloudwatch指标的阶段部署它.为此,我需要使用需要阶段名称的aws_api_gateway_method_settings.如果不使用aws_api_gateway_stage创建 ...
1
node.js – 如何避免通过重新映射的无服务器框架从Lambda传回API网关的头文件?
问答当我尝试使用WWW-Authenticate质询标头响应Serverless Lambda函数时,我遇到了一个问题. 我正在做出回应 { statusCode: 401, headers: { 'WW ...
1
.NET Core开源API网关 – Ocelot中文文档
日志Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由.请求聚合.服务发现.认证.鉴权.限流熔断.并内置了负载均衡器与Service Fabric.Butterfly ...
1
API网关Ocelot 使用Polly 处理部分失败问题
日志在实现API Gateway过程中,另外一个需要考虑的问题就是部分失败.这个问题发生在分布式系统中当一个服务调用另外一个服务超时或者不可用的情况.API Gateway不应该被阻断并处于无限期等待下游 ...
1
Asp.Net Core API网关Ocelot
日志首先,让我们简单了解下什么是API网关?       API网关是一个服务器,是系统的唯一入口.从面向对象设计的角度看,它与外观模式类似.API网关封装了系统内部架构,为每个客户端提供一个定制的API ...
1
微服务(入门三):netcore ocelot api网关结合consul服务发现
日志简介   api网关是提供给外部调用的统一入口,类似于dns,所有的请求统一先到api网关,由api网关进行指定内网链接.   ocelot是基于netcore开发的开源API网关项目,功能强大,使用 ...
1
NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇
日志原文:NET Core微服务之路:基于Ocelot的API网关Relay实现--RPC篇前言 我们都知道,API网关是工作在应用层上网关程序,为何要这样设计呢,而不是将网关程序直接工作在传输层.或者网 ...
1
基于.NET CORE微服务框架 -谈谈surging API网关
日志原文:基于.NET CORE微服务框架 -谈谈surging API网关1.前言 对于最近surging更新的API 网关大家也有所关注,也收到了不少反馈提出是否能介绍下Api网关,那么我们将在此篇文 ...
2
基于.NET CORE微服务框架 -Api网关服务管理
日志原文:基于.NET CORE微服务框架 -Api网关服务管理1.前言 经过10多天的努力,surging 网关已经有了大致的雏形,后面还会持续更新完善,请大家持续关注研发的动态 最近也更新了surgi ...
3
使用 Node.js 搭建一个 API 网关
日志原文地址:Building an API Gateway using Node.js 外部客户端访问微服务架构中的服务时,服务端会对认证和传输有一些常见的要求.API 网关提供共享层来处理服务协议之间 ...
2
微服务No.4 API网关组件Ocelot+Consul
日志介绍: Ocelot是一个.NET API网关.该项目针对的是使用.NET运行微服务/面向服务架构的人员,他们需要一个统一的入口进入他们的系统.然而,它可以处理任何说HTTP并在ASP.NET Cor ...
1
一个优秀的http实现框架
日志package com.ming; import com.mashape.unirest.http.HttpResponse; import com.mashape.unirest.http.Unir ...
1
Ocelot——初识基于.Net Core的API网关
日志前言 前不久看到一篇<.NET Core 在腾讯财付通的企业级应用开发实践>,给现在研究.Net Core及想往微服务方向发展的人来了一剂强心针.于是我也就立刻去下Ocelot的源码及去阅 ...
1
Java框架spring Boot学习笔记(九):一个简单的RESTful API
日志RESTful API设计需求如下:   User.java package com.springboot.test; public class User { private Long id; pri ...
1
使用ocelot作为api网关
日志新建网站项目然后添加ocelot 的nuget包 新建ocelot.json的网关的配置文件 { "GlobalConfiguration": { "BaseUrl&qu ...
1
API Star:一个 Python 3 的 API 框架
日志为了在 Python 中快速构建 API,我主要依赖于 Flask.最近我遇到了一个名为 "API Star" 的基于 Python 3 的新 API 框架.由于几个原因,我对它很 ...
1
API网关spring cloud gateway和负载均衡框架ribbon实战
日志    通常我们如果有一个服务,会部署到多台服务器上,这些微服务如果都暴露给客户,是非常难以管理的,我们系统需要有一个唯一的出口,API网关是一个服务,是系统的唯一出口.API网关封装了系统内部的微服 ...
2
Ocelot:API网关概要
日志一.概要 Ocelot是.Net Core下一个开源API网关:Ocelot主要目标是在.NET在微服务或面向服务架构中提供统一的入口服务, Ocelot拿到HttpRequest对象到管道后,先创建 ...
1
.NET Core 玩一玩 Ocelot API网关
日志.net 这几年国内确实不好过. 很多都选择转行.不过.net Core跨平台 开源之后 .社区的生态在慢慢建立.往好的趋势发展. 对于坚守在.NET战线的开发者来说 是个挺不错的消息.  特别是微软 ...
1