Noter.Microbridge.Extensions 1.0.0

Noter.Microbridge.Extensions

项目简介

Noter.Microbridge.Extensions 是一个用于微服务通信的扩展库,提供了微服务网关的客户端和服务实现。该库旨在简化微服务之间的通信,提供统一的服务发现、路由和调用机制。

主要功能

  • 微服务客户端:提供标准化的HTTP通信客户端,支持各种HTTP方法(GET、POST、PUT、DELETE等)
  • 微服务服务实现:提供微服务注册、发现和管理功能
  • 服务健康检查:支持微服务健康状态监控
  • 负载均衡:支持多种路由策略(轮询、权重轮询、随机、哈希、最少连接、健康优先)
  • 请求重试与熔断:内置Polly策略,提供请求重试、超时和熔断机制
  • 缓存支持:提供内存缓存,优化服务查询性能

安装方法

在你的项目中添加对Noter.Microbridge.Extensions的引用:

<PackageReference Include="Noter.Microbridge.Extensions" Version="x.x.x" />

使用方法

1. 注册微服务客户端

在你的应用程序启动代码中注册微服务客户端:

services.AddMicrobridgeClient(options => 
{
    options.Url = "https://api.example.com"; // 微服务网关地址
    options.Key = "your-secret-key"; // 密钥,用于请求签名
    options.MerchantNo = "MERCHANT001"; // 项目或商户编号
    options.Version = "v1.0.0"; // 客户端版本号
    options.MachineName = Environment.MachineName; // 机器名称,默认为当前机器名
});

2. 使用微服务客户端

注入IMicrobridgeClient接口,并使用它发送请求:

public class YourService
{
    private readonly IMicrobridgeClient _client;

    public YourService(IMicrobridgeClient client)
    {
        _client = client;
    }

    public async Task<UserDto> GetUserAsync(string userId)
    {
        // 发送GET请求
        var parameters = new Dictionary<string, string>
        {
            { "id", userId }
        };
        
        return await _client.GetAsync<UserDto>(
            path: "api/users", 
            serviceno: "USER_SERVICE", // 目标微服务编号
            parameters: parameters);
    }

    public async Task<OrderDto> CreateOrderAsync(OrderRequest request)
    {
        // 发送POST请求
        return await _client.PostAsync<OrderDto>(
            path: "api/orders", 
            serviceno: "ORDER_SERVICE", // 目标微服务编号
            data: request);
    }
}

3. 注册微服务服务实现

如果你需要开发一个微服务,可以注册微服务服务实现:

services.AddMicrobridgeService(options => 
{
    options.Url = "https://gateway.example.com"; // 微服务网关地址
    options.Key = "your-secret-key"; // 密钥,用于请求签名
    options.ServiceNo = "YOUR_SERVICE"; // 当前服务编号
    options.Version = "v1.0.0"; // 服务版本号
    options.MachineName = Environment.MachineName; // 机器名称,默认为当前机器名
});

4. 使用微服务服务实现

注入IMicrobridgeService接口,并使用它获取微服务信息:

public class YourController
{
    private readonly IMicrobridgeService _service;

    public YourController(IMicrobridgeService service)
    {
        _service = service;
    }

    public async Task<IActionResult> GetServiceInfo(string serviceNo)
    {
        // 获取微服务信息
        var service = await _service.GetServiceByNoAsync(serviceNo);
        if (service == null)
        {
            return NotFound();
        }
        
        return Ok(service);
    }

    public async Task<IActionResult> GetServiceAddresses(string serviceId)
    {
        // 获取微服务地址列表
        var addresses = await _service.GetAddressesByServiceIDAsync(serviceId);
        return Ok(addresses);
    }
}

高级功能

自定义HTTP请求头

var headers = new Dictionary<string, string>
{
    { "X-Custom-Header", "CustomValue" },
    { "X-Trace-Id", Guid.NewGuid().ToString() }
};

var result = await _client.GetAsync<ResponseDto>(
    path: "api/resource", 
    serviceno: "TARGET_SERVICE",
    headers: headers);

请求取消支持

var cancellationTokenSource = new CancellationTokenSource();
cancellationTokenSource.CancelAfter(TimeSpan.FromSeconds(5)); // 5秒后取消

try
{
    var result = await _client.GetAsync<ResponseDto>(
        path: "api/resource", 
        serviceno: "TARGET_SERVICE",
        cancellationToken: cancellationTokenSource.Token);
}
catch (OperationCanceledException)
{
    // 处理请求取消
}

自定义内容类型

var result = await _client.PostAsync<ResponseDto>(
    path: "api/resource", 
    serviceno: "TARGET_SERVICE",
    data: requestData,
    contentType: "application/xml");

注意事项

  1. 确保在使用前正确配置微服务网关地址和密钥
  2. 服务编号必须与网关中注册的服务编号一致
  3. 密钥用于请求签名,请妥善保管,不要泄露
  4. 默认使用内存缓存优化性能,缓存过期时间为10分钟
  5. 内置请求重试机制,默认最多重试3次

依赖项

  • .NET 8.0
  • Microsoft.Extensions.Caching.Memory
  • Microsoft.Extensions.DependencyInjection
  • Microsoft.Extensions.Http
  • Microsoft.Extensions.Http.Polly
  • Microsoft.Extensions.Options
  • Netor.Extensions.EncryptExtensions
  • Netor.Extensions.EnumSourceGenerator
  • Netor.Extensions.JsonExtensions
  • Netor.Extensions.StringExtensions
  • Netor.Extensions.TICollectionExtensions
  • Netor.Extensions.EnumExtensions

许可证

版权所有 © 2024 Noter.me

No packages depend on Noter.Microbridge.Extensions.

提供微服务端和客户端调用代码

Version Downloads Last updated
1.1.0 18 10/10/2025
1.0.9 5 09/25/2025
1.0.8 3 09/25/2025
1.0.7 5 09/24/2025
1.0.6 4 09/24/2025
1.0.5 8 09/02/2025
1.0.4 6 09/02/2025
1.0.3 7 09/01/2025
1.0.2 8 09/01/2025
1.0.1 7 08/18/2025
1.0.0 6 08/18/2025