首页 > 其他分享 >Ocelot网关(三)

Ocelot网关(三)

时间:2024-07-30 16:19:31浏览次数:5  
标签:网关 Service app Value values Ocelot localhost

下面是一个在 .NET Core 中使用 Ocelot 的简单示例。这个示例展示了如何设置 Ocelot 作为 API Gateway,将请求转发到不同的后端微服务。

步骤 1:创建项目

  1. 创建一个新的 .NET Core Web 应用程序(API 项目):

    dotnet new webapi -n OcelotGateway
    cd OcelotGateway

    创建两个简单的后端微服务作为示例:
    ServiceA

    dotnet new webapi -n ServiceA
    cd ServiceA
    

    ServiceA/Controllers 目录中,创建 ValuesController.cs

    using Microsoft.AspNetCore.Mvc;
    
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(new[] { "Value from Service A - 1", "Value from Service A - 2" });
        }
    }

    ServiceB

    dotnet new webapi -n ServiceB
    cd ServiceB

    ServiceB/Controllers 目录中,创建 ValuesController.cs

    using Microsoft.AspNetCore.Mvc;
    
    [Route("api/[controller]")]
    [ApiController]
    public class ValuesController : ControllerBase
    {
        [HttpGet]
        public IActionResult Get()
        {
            return Ok(new[] { "Value from Service B - 1", "Value from Service B - 2" });
        }
    }

     

    步骤 2:添加 Ocelot
    在 OcelotGateway 项目中,添加 Ocelot NuGet 包:

    dotnet add package Ocelot

    创建 ocelot.json 配置文件,在 OcelotGateway 项目的根目录中添加 ocelot.json 文件,内容如下:

    {
      "Routes": [
        {
          "DownstreamPathTemplate": "/api/values",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001
            }
          ],
          "UpstreamPathTemplate": "/servicea/values",
          "UpstreamHttpMethod": [ "GET" ]
        },
        {
          "DownstreamPathTemplate": "/api/values",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5002
            }
          ],
          "UpstreamPathTemplate": "/serviceb/values",
          "UpstreamHttpMethod": [ "GET" ]
        }
      ]
    }

    步骤 3:配置 Ocelot

    Startup.cs 文件中,添加 Ocelot 的配置:

    using Ocelot.DependencyInjection;
    using Ocelot.Middleware;
    
    
    var builder = WebApplication.CreateBuilder(args);
    
    builder.Services.AddEndpointsApiExplorer();
    builder.Services.AddSwaggerGen();
    builder.Services.AddOcelot();
    
    var app = builder.Build();
    
    // Configure the HTTP request pipeline.
    if (app.Environment.IsDevelopment())
    {
        app.UseSwagger();
        app.UseSwaggerUI();
    }
    
    app.UseHttpsRedirection();
    
    
    var summaries = new[]
    {
        "Freezing", "Bracing", "Chilly", "Cool", "Mild", "Warm", "Balmy", "Hot", "Sweltering", "Scorching"
    };
    
    app.MapGet("/weatherforecast", () =>
    {
        var forecast = Enumerable.Range(1, 5).Select(index =>
            new WeatherForecast
            (
                DateOnly.FromDateTime(DateTime.Now.AddDays(index)),
                Random.Shared.Next(-20, 55),
                summaries[Random.Shared.Next(summaries.Length)]
            ))
            .ToArray();
        return forecast;
    })
    .WithName("GetWeatherForecast")
    .WithOpenApi();
    
    // 启动 Ocelot
    await app.UseOcelot();
    
    app.Run();
    
    record WeatherForecast(DateOnly Date, int TemperatureC, string? Summary)
    {
        public int TemperatureF => 32 + (int)(TemperatureC / 0.5556);
    }

    步骤 4:运行服务

    1. 在终端中,打开三个终端窗口,分别启动 Ocelot Gateway 和两个微服务:
      • 启动 ServiceA

        cd ServiceA dotnet run
      • 启动 ServiceB

        cd ServiceB dotnet run
      • 启动 OcelotGateway

        cd OcelotGateway dotnet run

    步骤 5:测试 API Gateway

    1. 使用 Postman 或浏览器测试 API Gateway:
      • 访问 Service A:

        GET http://localhost:5000/servicea/values

        应该返回:

        ["Value from Service A - 1", "Value from Service A - 2"]
      • 访问 Service B:

        GET http://localhost:5000/serviceb/values

        应该返回:

        ["Value from Service B - 1", "Value from Service B - 2"]



    解释json

    {
      "Routes": [
        {
          "DownstreamPathTemplate": "/api/values",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001
            }
          ],
          "UpstreamPathTemplate": "/servicea/values",
          "UpstreamHttpMethod": [ "GET" ]
        },
        {
          "DownstreamPathTemplate": "/api/values",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5002
            }
          ],
          "UpstreamPathTemplate": "/serviceb/values",
          "UpstreamHttpMethod": [ "GET" ]
        }
      ]
    }

    解析这个示例

    1. 第一条路由

      • 当客户端发送请求到 /servicea/values(UpstreamPathTemplate)时,Ocelot 会将请求转发到 http://localhost:5001/api/values(DownstreamPathTemplate)。
    2. 第二条路由

      • 当客户端发送请求到 /serviceb/values 时,Ocelot 会将请求转发到 http://localhost:5002/api/values

标签:网关,Service,app,Value,values,Ocelot,localhost
From: https://www.cnblogs.com/ZkbFighting/p/18332703

相关文章

  • Ocelot网关(二)
    问:在netCore中可以将什么看作是网关呢?我觉得Route也是一个网关,可以对请求url进行匹配在.NETCore中,确实可以将Route(路由)看作是某种形式的网关。它负责将传入的HTTP请求URL匹配到相应的处理程序(如控制器或动作方法),并且可以对请求进行分发和管理。下面是一些关于.NETCore......
  • Ocelot网关(一)
    Ocelot是一个开源的.NETCore中间件,专门用于管理APIGateway,提供了路由、请求过滤、请求转发等功能。为了让这个概念更加生动和易于理解,我们可以使用一个比喻来说明APIGateway的作用以及Ocelot的功能。比喻介绍想象一下,APIGateway就像一个大型购物中心的前台(或服务台......
  • 瑞斯康达-多业务智能网关 list_base_config.php 远程命令执行漏洞
    0x01阅读须知        技术文章仅供参考,此文所提供的信息只为网络安全人员对自己所负责的网站、服务器等(包括但不限于)进行检测或维护参考,未经授权请勿利用文章中的技术资料对任何计算机系统进行入侵操作。利用此文所提供的信息而造成的直接或间接后果和损失,均由使用者......
  • SpringCloud网关登录校验
    SpringCloud网关登录校验文章目录SpringCloud网关登录校验1、鉴权思路分析2、网关过滤器3、自定义过滤器3.1、自定义GatewayFilter3.2、自定义GlobalFilter4、登录校验5、微服务获取用户5.1、保存用户到请求头5.2、拦截器获取用户6、OpenFeign传递用户1、鉴权......
  • 网关登录校验
    网关登录校验首先写一个demopackagecom.hmall.gateway.filter;importcom.hmall.gateway.config.AuthProperties;importcom.hmall.gateway.util.JwtTool;importlombok.RequiredArgsConstructor;importlombok.extern.slf4j.Slf4j;importorg.springframework.cl......
  • 高速上用到的视频上云网关现在市场上真的太卷了
      先看一个需求: 这个是最近的一个招标项目上对视频网关的需求,我看了以后,真的有点不知道该怎么说。两个问题:第一个问题,目前都在执行新标准了,部标目前是128K推送到标准了,这个招标文件中还是32K,看来设计公司这个项目时,还是去年上半年的时候,但这个标发出来前,难道不应该......
  • 宏集物联网工控屏&网关实现Modbus TCP数据采集并通过TCP转发
    前言在日常的生产活动中,许多企业需要使用底层PLC或传感器数据,但部分企业的终端平台仅支持TCP协议,而不支持常见的PLC或Modbus协议。为了实现兼容性,需要使用协议转换网关,将底层协议转换为TCP协议。宏集物联网工控屏&网关支持200多种通信协议,包括常见的ModbusRTU/TCP、OPCUA,以......
  • BGP(Border Gateway Protocol,边界网关协议)劫持是指恶意或非法地篡改BGP路由信息的行为
    BGP(BorderGatewayProtocol,边界网关协议)劫持是指恶意或非法地篡改BGP路由信息的行为。BGP是互联网上用来交换路由信息的主要协议之一,它负责决定网络数据包应该如何从一个网络路由到另一个网络。BGP劫持可以分为两种主要类型:前缀劫持(PrefixHijacking):在前缀劫持中,攻击者发送......
  • Profinet转ModbusTCP网关模块的配置与应用详解
    Profinet转ModbusTCP网关模块的配置与应用详解Profinet转ModbusTCP网关模块(XD-ETHPN20)是一种常见的工业通信设备,广泛应用于现代工业自动化系统中。通过使用Profinet转ModbusTCP网关模块(XD-ETHPN20)将Profinet协议转换成ModbusTCP协议,实现了不同网络之间的互联互通。这种网关设备......
  • 流量回放新形态:基于网关 Access Log 发起
    作者:休祯背景为什么需要流量回放无论是面向即将上线的新版本做最后的性能测试,还是在遇到棘手的故障时帮助开发人员快速定位问题原因,流量回放技术都发挥着不可或缺的作用。使用真实世界的流量数据进行回放能使性能测试过程更加接近实际运行状态,确保新版本的性能真正满足用户的预......