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
  • 相关阅读:
    利用xslt合并多个xml文件到一个文件
    如果利用网络推广老家的特产水果?
    C#并行编程中的Parallel.Invoke
    Asp.Net MVC实现优酷(youku)Web的上传
    修改用户名后TSF出现"需要本地工作区。工作区 xxx 并未驻留在本计算机上"
    JS浏览器滚轮事件实现横向滚动照片展
    Android实现dialog时候弹出软键盘dialog移位问题
    快速搭建多线程Windows服务解决方案
    Difference between WCF and Web API and WCF REST and Web Service
    WPF应用程序的性能提升(一)
  • 原文地址:https://www.cnblogs.com/imtudou/p/13715073.html
Copyright © 2011-2022 走看看