Noter.Microbridge.Extensions 1.0.5
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://gateaway.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() },
{ "X-Test-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");
注意事项
- 确保在使用前正确配置微服务网关地址和密钥
- 服务编号必须与网关中注册的服务编号一致
- 密钥用于请求签名,请妥善保管,不要泄露
- 默认使用内存缓存优化性能,缓存过期时间为10分钟
- 内置请求重试机制,默认最多重试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.
提供微服务端和客户端调用代码
新增验证网关方法
.NET 8.0
- Microsoft.AspNetCore.Http.Abstractions (>= 2.3.0)
- Microsoft.Extensions.Caching.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Caching.Memory (>= 9.0.8)
- Microsoft.Extensions.DependencyInjection.Abstractions (>= 9.0.8)
- Microsoft.Extensions.Http (>= 9.0.8)
- Microsoft.Extensions.Http.Polly (>= 9.0.8)
- Microsoft.Extensions.Options (>= 9.0.8)
- Netor.Extensions.EncryptExtensions (>= 1.0.2)
- Netor.Extensions.EnumExtensions (>= 8.0.0)
- Netor.Extensions.EnumSourceGenerator (>= 1.0.1)
- Netor.Extensions.JsonExtensions (>= 1.0.1)
- Netor.Extensions.StringExtensions (>= 6.1.1)
- Netor.Extensions.TICollectionExtensions (>= 1.0.4)