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。

然后,将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();
        }); 

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

Ocelot一个优秀的.NET API网关框架的更多相关文章

  1. asp.net core集成CKEditor实现图片上传功能的示例代码

    背景本文为大家分享了asp.net core 如何集成CKEditor ,并实现图片上传功能的具体方法,供大家参考,......

  2. C#实现简单的五子棋游戏

    最近利用业余时间写了一个简单的五子棋游戏,没有利用深层次的面向对象技术,自学一年,代码和程序设计有不妥之处,还望大神......

  3. ASP.NET Core 3.1 中间件

    参考微软官方文档 :https://docs.microsoft.com/zh-cn/aspnet/core/fun......

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

    1 什么是Ocelot?Ocelot是一个用.NET Core实现并且开源的API网关,它功能强大,包括了:路由、请......

  5. .NET的并发编程(TPL编程)是什么?

    写在前面优秀软件的一个关键特征就是具有并发性。过去的几十年,我们可以进行并发编程,但是难度很大。以前,并发性软件的编......

  6. 浅入 .NET Core 中的内存和GC知识

    目录 托管代码 自动内存管理 参考资料: 【1】https://docs.microsoft.com/z......

  7. 为什么.NET Standard 仍然有意义?

    .NET Standard 是.NET 官方的API规范,可在许多.NET环境中使用。之所以存在,面向.NET St......

  8. 浅谈ASP.NET Core中IOC与DI的理解和使用

    说起IOC和DI,使用过ASP.NET Core的人对这两个概念一定不陌生,早前,自己也有尝试过去了解这两个东西,但......

  9. 巧用 Lazy 解决.NET Core中的循环依赖问题

    原文作者: Thomas Levesque原文链接:https://thomaslevesque.com/2020/......

  10. C# 调用FFmpeg处理音视频的示例

    FFmpeg 开源、跨平台、体积小、功能强大,提供了录制、转换以及流化音视频的完整解决方案。官网:https:/......

随机推荐

  1. Linux下使用timedatectl命令时间时区操作详解

    timedatectl命令对于RHEL / CentOS 7和基于Fedora 21+的分布式系统来说,是一个新工具......

  2. 详解java中static关键词的作用

    在java中,static是一个修饰符,用于修饰类的成员方法、类的成员变量,另外可以编写static代码块来优化程序......

  3. C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例)

    本文主要介绍了C# WinForm状态栏实时显示当前时间(窗体状态栏StatusStrip示例),分享给大家,具体如......

  4. C# 使用Socket链接Ftp服务器下载上传代码FTPClient

    C#操作FTP的类,Socket实现,网上找到的,整理了一下,处理了一些BUG,喜欢的拿去用,但不保证全部BUG已捉......

  5. php的curl携带header请求头信息实现http访问的方法

    导读:curl请求时添加请求头信息可以模拟真人操作,不容易被当成是爬虫机器人(采集),从而可以绕过Incapsula......

  6. python日志通过不同的等级打印不同的颜色(示例代码)

    1,不用第三方库# coding: utf-8import loggingBLACK, RED, GREEN, YE......

  7. Wi-Fi 6 与 5G 相比哪个更快?

    随着 iPhone12 的发布,iOS 系统正式开始拥抱 5G,智能手机全面进入了 5G 时代。伴随着各大运营商的 ......

  8. SQLServer 使用rand获取随机数的操作

    Rand()函数是系统自带的获取随机数的函数,可以直接运行select rand() 获取0~1之间的float型的......

  9. java ArrayBlockingQueue的方法及缺点分析

    提到ArrayBlockingQueue的方法,想必大家都不陌生,我们在入队和出队的时候,接触了不少这方面的函数。当......

  10. Python基础(中篇)

    数据类型的常用方法,条件语句,循环语句。本篇文章主要内容:数据类型的常用方法,条件语句,循环语句。在开始正篇之前我们......