C# 微服务:从 A 到 Z 的架构与实践

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

C# 微服务简介

\n

微服务架构已成为构建复杂、可扩展且高可用应用程序的事实标准。与所有代码都整合在单个进程中的单体架构不同,微服务将系统拆分为多个小型、可独立部署的服务。.NET (C#) 平台提供了创建专业微服务所需的所有工具:从用于 Web API 的 ASP.NET Core,到用于队列、容器化和编排的库。

\n

在本文中,我们将探讨从架构设计到使用 C# 实际实现微服务的完整路径,并附有代码示例。

\n\n

1. 微服务架构基础

\n

原则与反模式

\n

在编写代码之前,理解关键原则很重要:

\n
    \n
  • 单一职责 (SRP): 每个服务负责一个业务功能(例如,订单服务、支付服务)。
  • \n
  • 松耦合: 服务通过网络(HTTP、gRPC、队列)进行通信,并且不了解彼此的内部实现。
  • \n
  • 独立部署: 您可以更新一个服务而无需停止其他服务。
  • \n
  • 数据去中心化: 每个服务拥有自己的数据库(每个服务一个数据库)。
  • \n
\n

应避免的反模式: 过于细粒度的服务(纳米服务)、共享数据库、同步调用链(聊天式通信)。

\n\n

服务间通信

\n

对于 C# 微服务之间的交互,使用:

\n
    \n
  • 同步: REST API (HTTP/JSON) 或 gRPC(二进制协议,速度更快)。
  • \n
  • 异步: 消息队列(RabbitMQ、Azure Service Bus、Kafka)——这是实现松耦合的首选方式。
  • \n
\n\n

2. 使用 C# 实际实现微服务

\n

示例:订单管理服务

\n

我们将使用 ASP.NET Core 8 创建一个简单的微服务。使用整洁架构来分离各层。

\n\n

步骤 1:项目和结构

\n
dotnet new webapi -n OrderService\ncd OrderService
\n

创建文件夹:Controllers、Models、Services、Data。

\n\n

步骤 2:数据模型

\n
// Models/Order.cs\npublic class Order\n{\n    public int Id { get; set; }\n    public string CustomerName { get; set; }\n    public decimal TotalAmount { get; set; }\n    public DateTime CreatedAt { get; set; }\n}
\n\n

步骤 3:数据库上下文(Entity Framework Core)

\n
// Data/OrderDbContext.cs\npublic class OrderDbContext : DbContext\n{\n    public OrderDbContext(DbContextOptions<OrderDbContext> options) : base(options) { }\n    public DbSet<Order> Orders { get; set; }\n}
\n\n

步骤 4:服务层

\n
// Services/IOrderService.cs\npublic interface IOrderService\n{\n    Task<Order> CreateOrderAsync(Order order);\n    Task<List<Order>> GetAllOrdersAsync();\n}\n\n// Services/OrderService.cs\npublic class OrderService : IOrderService\n{\n    private readonly OrderDbContext _context;\n    public OrderService(OrderDbContext context)\n    {\n        _context = context;\n    }\n\n    public async Task<Order> CreateOrderAsync(Order order)\n    {\n        _context.Orders.Add(order);\n        await _context.SaveChangesAsync();\n        return order;\n    }\n\n    public async Task<List<Order>> GetAllOrdersAsync()\n    {\n        return await _context.Orders.ToListAsync();\n    }\n}
\n\n

步骤 5:控制器

\n
// Controllers/OrdersController.cs\n[ApiController]\n[Route("api/[controller]")]\npublic class OrdersController : ControllerBase\n{\n    private readonly IOrderService _orderService;\n    public OrdersController(IOrderService orderService)\n    {\n        _orderService = orderService;\n    }\n\                

博客

书籍推荐