C#微服务:面向.NET开发人员的架构与实践

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

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

开始课程

C# 微服务:从理论到 .NET 实践



微服务架构已成为构建可扩展、高容错应用程序的标准。.NET (C#) 平台提供了创建此类系统所需的所有工具:从内置的容器化支持到强大的服务间通信框架。本文将剖析在 C# 中构建微服务的关键原则,并展示实际代码示例。



1. .NET 微服务架构基础



微服务是一种将应用程序拆分为独立、松散耦合服务的方法。每个服务负责自己的业务功能,可以独立于其他服务进行开发、部署和扩展。



.NET 开发者的关键原则:

  • 单一职责 (Single Responsibility) — 每个微服务解决一个任务。
  • 数据独立性 — 每个服务拥有自己的数据库 (Database per Service)。
  • 松散耦合 (Loose Coupling) — 服务通过 API 通信,而非共享内存。
  • 自治性 — 服务可以在不停止整个系统的情况下进行修改和重新部署。


要在 C# 中创建新的微服务项目,请使用以下命令:

dotnet new webapi -n UserServicedotnet new webapi -n OrderServicedotnet new webapi -n NotificationService


每个项目都有自己的 Program.cs、配置和依赖项。



2. 服务间通信:REST 和 gRPC



在 .NET 中,微服务之间的通信主要有两种方法:同步(REST/gRPC)和异步(通过消息代理)。我们将讨论这两种方法。



使用 HttpClient 的 REST API

最简单的方法是使用 HttpClientFactory 创建类型化客户端。



// 在 OrderService 服务的 Program.cs 中builder.Services.AddHttpClient<IUserServiceClient, UserServiceClient>(client =>{    client.BaseAddress = new Uri("http://userservice:5000");});

// UserServiceClient.cspublic class UserServiceClient : IUserServiceClient{ private readonly HttpClient _httpClient;

public UserServiceClient(HttpClient httpClient) { _httpClient = httpClient; }

public async Task<UserDto> GetUserAsync(int userId) { var response = await _httpClient.GetAsync($"/api/users/{userId}"); response.EnsureSuccessStatusCode(); return await response.Content.ReadFromJsonAsync<UserDto>(); }}


建议:使用 Polly(.NET 库)来实现重试策略和 Circuit Breaker。



用于高性能场景的 gRPC

gRPC 运行在 HTTP/2 之上,并使用 Protocol Buffers 进行序列化。这比 JSON 快得多。



// 在 user.proto 中定义服务service UserGrpcService {  rpc GetUser (GetUserRequest) returns (UserResponse);}

// C# 服务器代码public class UserGrpcServiceImpl : UserGrpcService.UserGrpcServiceBase{ public override Task<UserResponse> GetUser(GetUserRequest request, ServerCallContext context) { var user = _dbContext.Users.Find(request.UserId); return Task.FromResult(new UserResponse { Id = user.Id, Name = user.Name, Email = user.Email }); }}


3. 数据管理和事务



在微服务中,每个数据库仅属于一个服务。这排除了服务之间的直接 SQL 查询。在 .NET 中,处理数据的标准是 Entity Framework Core。



微服务 DbContext 配置示例

public cla                

博客

书籍推荐