使用 .NET Core 实现微服务(带例子)

使用 .NET Core 实现微服务

使用 .NET Core 实现微服务架构涉及几个关键步骤,包括服务划分、API 网关、服务通信和容器化部署。下面是一个简化的示例,展示如何使用 .NET Core 实现一个基本的微服务架构。

步骤 1:创建独立的微服务

  1. 定义微服务

    每个微服务都是一个独立的 ASP.NET Core Web API 项目。例如,我们可以创建两个微服务:一个用户服务(UserService)和一个订单服务(OrderService)。

  2. 创建用户服务

    使用 .NET CLI 创建一个新的 ASP.NET Core Web API 项目:

    bash 复制代码
    dotnet new webapi -n UserService

    在 UserService 项目中定义一个简单的控制器:

    csharp 复制代码
    using Microsoft.AspNetCore.Mvc;
    
    namespace UserService.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class UsersController : ControllerBase
        {
            [HttpGet("{id}")]
            public IActionResult GetUserById(int id)
            {
                return Ok(new { Id = id, Name = "John Doe" });
            }
        }
    }
  3. 创建订单服务

    同样地,创建一个订单服务(OrderService)项目:

    bash 复制代码
    dotnet new webapi -n OrderService

    在 OrderService 项目中定义一个简单的控制器:

    csharp 复制代码
    using Microsoft.AspNetCore.Mvc;
    
    namespace OrderService.Controllers
    {
        [ApiController]
        [Route("[controller]")]
        public class OrdersController : ControllerBase
        {
            [HttpGet("{id}")]
            public IActionResult GetOrderById(int id)
            {
                return Ok(new { Id = id, Product = "Laptop", Quantity = 1 });
            }
        }
    }

步骤 2:使用 API 网关

  1. 创建 API 网关

    使用 Ocelot 作为 API 网关。创建一个新的 ASP.NET Core 项目用于 API 网关:

    bash 复制代码
    dotnet new webapi -n ApiGateway

    添加 Ocelot 包:

    bash 复制代码
    dotnet add package Ocelot

    配置 Ocelot。在 appsettings.json 中定义路由配置:

    json 复制代码
    {
      "Routes": [
        {
          "DownstreamPathTemplate": "/users/{id}",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5001
            }
          ],
          "UpstreamPathTemplate": "/api/users/{id}",
          "UpstreamHttpMethod": [ "Get" ]
        },
        {
          "DownstreamPathTemplate": "/orders/{id}",
          "DownstreamScheme": "http",
          "DownstreamHostAndPorts": [
            {
              "Host": "localhost",
              "Port": 5002
            }
          ],
          "UpstreamPathTemplate": "/api/orders/{id}",
          "UpstreamHttpMethod": [ "Get" ]
        }
      ],
      "GlobalConfiguration": {
        "BaseUrl": "http://localhost:5000"
      }
    }
  2. 配置启动文件

    Startup.cs 中配置 Ocelot:

    csharp 复制代码
    public void ConfigureServices(IServiceCollection services)
    {
        services.AddOcelot();
    }
    
    public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
    {
        if (env.IsDevelopment())
        {
            app.UseDeveloperExceptionPage();
        }
    
        app.UseRouting();
        app.UseEndpoints(endpoints =>
        {
            endpoints.MapControllers();
        });
    
        app.UseOcelot().Wait();
    }

步骤 3:运行微服务和 API 网关

  1. 运行服务

    启动 UserService 和 OrderService,指定不同的端口:

    bash 复制代码
    dotnet run --project UserService --urls "http://localhost:5001"
    dotnet run --project OrderService --urls "http://localhost:5002"
  2. 运行 API 网关

    启动 ApiGateway 项目:

    bash 复制代码
    dotnet run --project ApiGateway --urls "http://localhost:5000"

步骤 4:测试微服务

使用浏览器或 Postman 访问以下 URL 测试微服务:

  • 获取用户信息:http://localhost:5000/api/users/1
  • 获取订单信息:http://localhost:5000/api/orders/1

结论

通过上述步骤,你可以创建和运行一个基本的微服务架构,其中每个微服务都是一个独立的 ASP.NET Core Web API 项目,API 网关使用 Ocelot 进行路由和负载均衡。根据具体需求,还可以添加更多的微服务、身份验证和授权机制、服务发现、监控等功能。

相关推荐
蔡俊锋6 小时前
DeepSeek 语音对话灰度上线:四种音色背后的端侧 AI 交互架构与商业逻辑
架构·大模型·语音交互·deepseek·端侧ai
云边有个稻草人7 小时前
OceanBaseVS金仓:从架构效率到复杂SQL,解析金仓数据库的性能竞争力
架构·数据库架构·数据库性能·数据库选型·oceanbasevs金仓·复杂sql优化·事务性能
今天AI了吗8 小时前
什么是 AI Agent?它与直接调用大模型 API 有何区别
java·网络·人工智能·架构·java-ee
一尘之中9 小时前
深入解析面向服务的架构(SOA):从特性到实施
学习·架构·ai写作
嘟嘟嘟95279 小时前
AI Agent 的边缘困境
人工智能·架构·agent
学渣超9 小时前
记一次复杂业务功能重构——从过程式长链路,到模板方法构建体系
java·架构·代码规范
星禾元亨9 小时前
生成式 AI 时代的架构演进与 GEO 优化:实体企业 AI 落地避坑指南
大数据·人工智能·架构·自动化·创业创新
这个DBA有点耶9 小时前
MySQL大表DDL锁表锁到崩溃?Online DDL的3个关键参数和实战避坑
数据库·mysql·架构
依依东望96110 小时前
还在用 Electron?6 种跨平台桌面方案横评:Rust + Vue 把安装包从 224MB 干到 4.7MB
架构
弈栈录11 小时前
LangChain Agent 实战:快速构建可调用工具的智能体
python·架构