zoukankan      html  css  js  c++  java
  • 通过 Ocelot 实现 API 网关

    通过 Ocelot 实现 API 网关

    API 网关

    API网关是一个服务器,是系统的唯一入口,为每个客户端提供一个定制的API。它可能还具有其它职责,如身份验证、监控、负载均衡、缓存、请求分片与管理、静态响应处理。

    Ocelot

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

    安装依赖

    Install-Package Ocelot

    创建 Gateway.API

    • Startup.cs中 配置如下
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOcelot();
    }
    
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        app.UseOcelot();
    }
            
    
    • 在 Gateway.API 中新建名为 Ocelot.json的json配置文件

    具体配置项请参照官方文档配置

    {
      "Routes": [
        /*
            ## User.API
               用户服务
        */
        {
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001
            }
          ],
          "DownstreamPathTemplate": "/api/user",
          "UpstreamPathTemplate": "/user",
          "UpstreamHttpMethod": [ "Get" ]
    
          //"AuthenticationOptions": {
          //  "AuthenticationProviderKey": "finbook",
          //  "AllowedScopes": []
          //}
    
        },
    
        /*
          ## Contacts.API
             通讯录服务
        */
        {
          //获取联系人信息
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5003
            }
          ],
          "DownstreamPathTemplate": "/api/contacts",
          "UpstreamPathTemplate": "/contacts",
          "UpstreamHttpMethod": [ "Get" ]
        },
        {
          //给联系人打标签
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5003
            }
          ],
          "DownstreamPathTemplate": "/api/contacts/tags",
          "UpstreamPathTemplate": "/contacts/tags",
          "UpstreamHttpMethod": [ "Put" ]
        },
        {
          //好友申请(添加,通过,获取)
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5003
            }
          ],
          "DownstreamPathTemplate": "/api/contacts/apply-request",
          "UpstreamPathTemplate": "/contacts/apply-request",
          "UpstreamHttpMethod": [ "Get", "Post", "Put" ]
        }
    
      ],
      "GlobalConfiguration": {
        "BaseUrl": "http://localhost:5000"
      }
    }
    
    • Program.cs中配置如下
    public class Program
    {
    
        public static void Main(string[] args)
        {
            CreateHostBuilder(args).Build().Run();
        }
    
        public static IHostBuilder CreateHostBuilder(string[] args) =>
            Host.CreateDefaultBuilder(args)
                .ConfigureAppConfiguration(config=> {
                    config                   
                    .AddJsonFile("appsettings.json", true, true)
                    .AddJsonFile("Ocelot.json");
                    
                })
                .ConfigureWebHostDefaults(webBuilder =>
                {
                    webBuilder.UseStartup<Startup>();
                });
    }
    
    

    调试

    实际上在地址栏中请求上游地址 http://localhost:5000/contactsocelot会帮我们转发到配置的下游地址http://localhost:5003/api/contacts以上一个简单的网关即搭建完成了

    image

    • 在地址栏请求
      image
  • 相关阅读:
    python 包管理工具 pip 的配置
    Python 变量作用域 LEGB (下)—— Enclosing function locals
    Python 变量作用域 LEGB (上)—— Local,Global,Builtin
    2020 Java 面试题 小结 (答案慢慢补上,有错误请指出)
    mysql 根据日期(date)做年,月,日分组统计查询
    jvm指令
    正则表达式 分割地址 获取省市区详细地址
    .Net 异常记录
    WCF设计服务协议(一)
    plsql ORA-01789:查询块具有不正确的结果列数
  • 原文地址:https://www.cnblogs.com/imtudou/p/13715073.html
Copyright © 2011-2022 走看看