首页 > 编程语言 >.NET Aspire 中的服务发现

.NET Aspire 中的服务发现

时间:2024-04-02 15:45:56浏览次数:28  
标签:服务 builder basket dashboard 端点 Aspire http NET

.NET Aspire 中的服务发现

https://www.nuget.org/packages/Microsoft.Extensions.ServiceDiscovery

.NET Aspire 中的服务发现

.NET Aspire 包含了对于开发阶段和测试阶段配置服务发现的功能。该功能通过提供基于配置的服务端点解析器来实现,来自 .NET Aspire AppHost 项目中的服务发现配置为每个服务项目增加了服务发现。

配置服务发现仅仅需要对指定的项目添加所引用的服务来实现。例如,考虑如下的 AppHost 代码:

var builder = DistributedApplication.CreateBuilder(args);

var catalog = builder.AddProject<Projects.CatalogService>("catalog");
var basket = builder.AddProject<Projects.BasketService>("basket");

var frontend = builder.AddProject<Projects.MyFrontend>("frontend")
       .WithReference(basket)
       .WithReference(catalog);

在上面的示例中,frontend 项目引用了 catalog 项目和 basket 项目。两个 WithReference() 调用指示 .NET Aspire 应用为引用的服务 (catalog 和 basket) 传递服务发现信息到 frontend 项目中。

命名端点

有些服务暴露多个命名端点。命名的端点可以通过指定 HTTP 请求的 URL 中的主机部分中的端点名称来解析。遵循的格式为:http://_endpointName.serviceName。例如,如果服务名称为 basket,暴露的命名端点为 dashboard,那么,可以使用 URI http://_dashboard.basket 来指定端点,例如:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("http://basket"));
builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("http://_dashboard.basket"));

在上面的示例中,两个 HttpClient 被添加出来,一个用于核心的 basket 服务,另外一个用于 basket 服务的 dashboard。

通过 Configuration 配置命名端点

对于基于配置的端点解析器,命名端点可以通过 _endpointName 前缀来配置端点的值,这里的 endpointName 就是端点的名称。例如,考虑下面的 appsettings.json,它定义了一个默认端点 (没有名称) 和一个命名端点 ( dashboard )

{
  "Services": {
    "basket": [
      "10.2.3.4:8080", /* the default endpoint, when resolving http://basket */
      "_dashboard.10.2.3.4:9999" /* the "dashboard" endpoint, resolved via http://_dashboard.basket */
    ]
  }
}

.NET Aspire 中的命名端点

.NET Aspire 在开发阶段和测试阶段使用基于配置的服务解析器。提供了方便的 API 来配置命名端点,随后使用到目标服务的配置中。例如:

var builder = DistributedApplication.CreateBuilder(args);

var basket = builder.AddProject<Projects.BasketService>("basket")
    .WithEndpoint(hostPort: 9999, scheme: "http", name: "admin");

var adminDashboard = builder.AddProject<Projects.MyDashboardAggregator>("admin-dashboard")
       .WithReference(basket.GetEndPoint("admin"));

var frontend = builder.AddProject<Projects.Frontend>("frontend")
       .WithReference(basket);

对于这个示例来说,basket 服务暴露了 admin 端点,该服务端点被 admin-dashboard 项目所使用,而 frontend 项目则使用了来自 basket 的所有端点。同时,对于 frontend 项目来说,它还可以只使用来自 basket 的默认 http 端点,通过使用 GetEndPoint(string name) 方法来使用,如下所示:

// The preceding code is the same as in the above sample

var frontend = builder.AddProject<Projects.Frontend>("frontend")
       .WithReference(basket.GetEndpoint("http"));

应该是 admin

Kubernetes 中使用 DNS SRV 的命名端点

当部署在 Kubernetes 中的时候,DNS SRV 服务端点解析器可以被用于解析命名端点。例如,下面的资源定义将创建命名端点 default 的 DNS SRV 记录和名为 dashboard 的命名记录。它们都在服务 basket 中。

apiVersion: v1
kind: Service
metadata:
  name: basket
spec:
  selector:
    name: basket-service
  clusterIP: None
  ports:
  - name: default
    port: 8080
  - name: dashboard
    port: 8888

为了配置服务解析 basket 服务中的命名端点 dashboard,在 Host Builder 中增加 DNS SRV 服务端点解析器,如下所示:

builder.Services.AddServiceDiscoveryCore();
builder.Services.AddDnsSrvServiceEndPointResolver();

专用的端口名称 default 用于默认端点,使用 URI http://basket 可以解析。

对于上面的示例,为 basket 服务增加服务发现支持:

builder.Services.AddHttpClient<BasketServiceClient>(
    static client => client.BaseAddress = new("http://basket"));

类似的,对于 dashboard 服务端点,可以使用如下方式:

builder.Services.AddHttpClient<BasketServiceDashboardClient>(
    static client => client.BaseAddress = new("http://_dashboard.basket"));

Azure Container Apps 中的命名端点

目前不支持

标签:服务,builder,basket,dashboard,端点,Aspire,http,NET
From: https://www.cnblogs.com/haogj/p/18110706

相关文章

  • PowerShell 中,你可以使用 Get-NetRoute 命令来查看本地系统的路由表。这个命令将显示
    PowerShell中,你可以使用Get-NetRoute命令来查看本地系统的路由表。这个命令将显示系统中的所有路由条目,包括目的网络、子网掩码、网关、接口索引等信息。以下是使用Get-NetRoute命令的示例:powershellCopyCodeGet-NetRoute这将列出系统中的所有路由条目。ifIndexDes......
  • .net core webapi统一修改日期时间的返回格式
    在写WebApi时,我们的日期时间往往是DateTime类型,如果直接返回,前端拿到的结果有可能会是这种格式:下面是如何将返回的DateTime字段统一改成自定义的格式首先创建一个自定义的JSON序列化器,定义一个继承System.Text.Json.Serialization.JsonConverter的类,实现Read和Write两个抽象方......
  • 2024年阿里云2核4G服务器首购优惠大揭秘:价格究竟会是多少?
    随着云计算技术的飞速发展,越来越多的企业倾向于选择云服务器作为其应用平台的基础架构。在众多云服务提供商中,阿里云凭借其卓越的服务器性能和合理的价格策略,赢得了广大企业的青睐。那么,展望即将到来的2024年,我们不禁好奇:阿里云2核4G配置的服务器价格究竟会是多少呢?详情参考:......
  • 2024年阿里云与腾讯云新人优惠活动:服务器价格大比拼
    在当今的云计算时代,选择一款性价比高、价格实惠的服务器对于企业和个人来说都是至关重要的。今天,我们就来为大家整理一下阿里云和腾讯云的便宜云服务器优惠购买价格,帮助大家做出更明智的选择。阿里云服务器价格亮点:2核2G3M轻量应用服务器,仅需62元/年2核2G3M经济型e实例云服务......
  • 腾讯云推出2核4G5M轻量服务器三年优惠:仅需900元,性能卓越
    随着云计算技术的日益成熟,越来越多的个人和企业开始选择云服务器作为自己的数据存储和业务应用平台。而在众多云服务提供商中,腾讯云凭借其稳定的性能、丰富的产品线以及优质的服务,赢得了广大用户的青睐。今天,我们要重点介绍的,就是腾讯云旗下一款性价比极高的云服务器产品——2......
  • NX mcd和Matlab通过opc服务器通讯仿真
    1,先在KEPServerEX6Configuration中建立simulator,搭建opc服务器。2,在这个通道下建立一个设备。3,建立一个节点,设置数据类型以及地址。(扫描速率最低可以调节到10)4.在matlab中建立opc的客户端,用于发送数据。5,在matlab中找到opc服务器并连接,并和节点建立连接。6,向KEPServerE......
  • 腾讯云2核4G5M轻量应用服务器在优惠活动中的表现:性能与价格双赢
    随着云计算技术的日益成熟,越来越多的个人和企业开始选择云服务器作为自己的数据存储和业务应用平台。而在众多云服务提供商中,腾讯云凭借其稳定的性能、丰富的产品线以及优质的服务,赢得了广大用户的青睐。今天,我们要重点介绍的,就是腾讯云旗下一款性价比极高的云服务器产品——2......
  • 【附源码】计算机毕业设计疫情居家隔离服务系统(java+springboot+mysql+mybatis+论文)
    本系统(程序+源码)带文档lw万字以上  文末可领取本课题的JAVA源码参考系统程序文件列表系统的选题背景和意义随着新冠疫情的爆发,居家隔离成为了防控疫情的重要手段之一。然而,在实际操作中,居家隔离存在着许多问题,如隔离人员的生活保障、健康状况监测等。因此,设计并实现一个......
  • .NET 服务发现
    .NET服务发现https://learn.microsoft.com/en-us/dotnet/core/extensions/service-discovery?tabs=dotnet-cli目前该包处于预览状态在本文中,我将为你介绍如何使用Microsoft.Extensions.ServiceDiscovery库,服务发现是开发者使用逻辑名称而不是物理地址(IP地址和端口)来......
  • centos7.9部署nginx服务
    首先,确保你已经安装了CentOS7.9,并且已经连接到互联网。下载Nginx的压缩包,可以在官方网站(https://nginx.org/en/download.html)上找到最新的稳定版本。使用以下命令下载压缩包:wgethttps://nginx.org/download/nginx-1.19.2.tar.gz也可用Xftp上传nginx-1.19.2.tar.gz包......