大数跨境
0
0

.NET服务发现(Microsoft.Extensions.ServiceDiscovery)集成Consul

.NET服务发现(Microsoft.Extensions.ServiceDiscovery)集成Consul dotNET跨平台
2024-04-22
33
导读:Microsoft.Extensions.ServiceDiscovery官方默认提供的Config,DNS,YARP三种Provider,使用也比较简单,这里主要讲讲如何扩展其他的中间件的发现集成

ASP.NET Core服务发现组件Microsoft.Extensions.ServiceDiscovery扩展实战

实现Consul服务注册发现集成方案

随着Aspire preview5版本的发布,微软推出的服务发现组件Microsoft.Extensions.ServiceDiscovery也同步更新。该组件通过标准接口为微服务架构提供服务注册发现能力。

官方默认支持Config、DNS和YARP三种服务发现方式,基本使用方式如下:

builder.Services.AddServiceDiscovery();

builder.Services.AddHttpClient<CatalogServiceClient>(static client =>
    {
        client.BaseAddress = new("http://todo");
    });

builder.Services.ConfigureHttpClientDefaults(static http =>
{
    // 全局启用服务发现
    http.UseServiceDiscovery();
});

服务配置可在appsettings.json中进行定义:

"Services": {
    "todo": {
      "http": ["http://localhost:5124"]
    }
  }

扩展Consul服务发现的核心在于实现两个关键接口:

  1. IServiceEndPointProvider - 服务端点提供接口
  2. IServiceEndPointProviderFactory - 服务端点工厂接口

核心代码结构示例如下:

internal class ConsulServiceEndPointProvider : IServiceEndPointProvider, IHostNameFeature
{
    public async ValueTask PopulateAsync(IServiceEndPointBuilder endPoints, CancellationToken cancellationToken)
    {
        // 从Consul获取服务实例列表
    }
}

internal class ConsulServiceEndPointProviderFactory : IServiceEndPointProviderFactory
{
    public bool TryCreateProvider(ServiceEndPointQuery query, out IServiceEndPointProvider? resolver)
    {
        // 创建Consul服务端点实例
    }
}

服务注册流程包括:

  1. 添加服务发现核心组件:services.AddServiceDiscoveryCore()
  2. 注册服务发现工厂:services.AddSingleton<IServiceEndPointProviderFactory...>
  3. 构建服务发现管道:.AddConsulServiceEndpointProvider()

完整实现已在GitHub开源(https://github.com/vipwan/Biwen.Microsoft.Extensions.ServiceDiscovery.Consul),并通过NuGet包实现便捷引用。

测试显示在成功集成Consul服务发现后,系统能正确识别注册中心的服务实例并实现负载均衡调用。

【声明】内容源于网络
0
0
dotNET跨平台
专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,
内容 906
粉丝 0
dotNET跨平台 专注于.NET Core的技术传播。在这里你可以谈微软.NET,Mono的跨平台开发技术。在这里可以让你的.NET项目有新的思路,不局限于微软的技术栈,横跨Windows,
总阅读14.8k
粉丝0
内容906