惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

罗磊的独立博客
L
LangChain Blog
aimingoo的专栏
aimingoo的专栏
IT之家
IT之家
B
Blog
博客园_首页
博客园 - 司徒正美
有赞技术团队
有赞技术团队
博客园 - 聂微东
I
InfoQ
美团技术团队
GbyAI
GbyAI
阮一峰的网络日志
阮一峰的网络日志
H
Help Net Security
大猫的无限游戏
大猫的无限游戏
MyScale Blog
MyScale Blog
WordPress大学
WordPress大学
The GitHub Blog
The GitHub Blog
A
About on SuperTechFans
人人都是产品经理
人人都是产品经理
Microsoft Azure Blog
Microsoft Azure Blog
Engineering at Meta
Engineering at Meta
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Cloudflare Blog

博客园 - shiningrise

Admin.NET开源版微服务改造记录 基于openspec-cn的SDD规范驱动开发实战 osharp集成Yitter.IdGenerator并实现分布式ID osharp多租户方案 deepseek本地部署简要教程 WinForm 直接运行 Admin.NET 在 ASP.NET Core 中创建 gRPC 客户端和服务器 Refit使用入门 Ocelot集成Consul实现api网关与服务发现 docker私有注册表 Abp源码分析之Serilog日志 Abp源码分析之虚拟文件系统Volo.Abp.VirtualFileSystem Abp源码分析之Abp本地化 Abp源码分析之Abp最小系统 类似hbuildx的软件 魔法商店题解 k8s配置文件 阿里k8s负载均衡型服务加证书方法 python远程登录Admin.NET
dotnet微服务之API网关Ocelot
shiningrise · 2024-11-18 · via 博客园 - shiningrise

前言

Ocelot 是一个基于 .NET 平台的 API 网关,专门设计用于微服务架构。它提供了一种简单而灵活的方式来管理微服务架构中的 API 请求路由、负载均衡、认证、授权和监控等功能。

新建webapi项目并引用最新的Ocelot

新建ocelot.json

{
  "Routes": [
    {
      "UpstreamPathTemplate": "/good/{everything}",
      "UpstreamHttpMethod": [ "Get" ],
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 7027
        }
      ]
    },
    {
      "UpstreamPathTemplate": "/order/{everything}",
      "UpstreamHttpMethod": [ "Get" ],
      "DownstreamPathTemplate": "/{everything}",
      "DownstreamScheme": "https",
      "DownstreamHostAndPorts": [
        {
          "Host": "localhost",
          "Port": 7209
        }
      ]
    }
  ],
  "GlobalConfiguration": {
    "BaseUrl": "https://localhost:7122"
  }
}

修改Program.cs

using Microsoft.AspNetCore.Builder;
using Microsoft.Extensions.DependencyInjection;
using Ocelot.DependencyInjection;
using Ocelot.Middleware;

var builder = WebApplication.CreateBuilder(args);

builder.Configuration.AddJsonFile("ocelot.json", optional: false, reloadOnChange: true);

builder.Services.AddOcelot();

var app = builder.Build();

app.UseOcelot().Wait();

app.Run();

新建webapi项目GoodApi与OrderApi

将HelloController.cs改为:

using Microsoft.AspNetCore.Mvc;

namespace OrderApi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class HelloController : ControllerBase
    {
        private readonly ILogger<HelloController> _logger;

        public HelloController(ILogger<HelloController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public string Get()
        {
            return "Hello GoodApi!" + DateTime.Now.ToString();
        }
    }
}

using Microsoft.AspNetCore.Mvc;

namespace OrderApi.Controllers
{
    [ApiController]
    [Route("[controller]")]
    public class HelloController : ControllerBase
    {
        private readonly ILogger<HelloController> _logger;

        public HelloController(ILogger<HelloController> logger)
        {
            _logger = logger;
        }

        [HttpGet]
        public string Get()
        {
            return "Hello OrderApi!" + DateTime.Now.ToString();
        }
    }
}

修改ocelot.json中的端口与实际项目一致

同时运行3个项目

访问:localhost:7122/good/Hellolocalhost:7122/order/Hello

显示:

附加说明

ocelot.json中UpstreamPathTemplate是我们访问api网关的路径

DownstreamPathTemplate是网关代理的后端的路径

最新版的配置文件中路由关键字是Routes,不是ReRoutes

作者

吴晓阳(手机:13736969112微信同号)