.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 中的命名端点

目前不支持

.NET Aspire 中的服务发现的更多相关文章

  1. Chris Richardson微服务翻译:微服务架构中的服务发现

    Chris Richardson 微服务系列翻译全7篇链接: 微服务介绍 构建微服务之使用API网关 构建微服务之微服务架构的进程通讯 微服务架构中的服务发现(本文) 微服务之事件驱动的数据管理 微服 ...

  2. 从零开始入门 | Kubernetes 中的服务发现与负载均衡

    作者 | 阿里巴巴技术专家  溪恒 一.需求来源 为什么需要服务发现 在 K8s 集群里面会通过 pod 去部署应用,与传统的应用部署不同,传统应用部署在给定的机器上面去部署,我们知道怎么去调用别的机 ...

  3. Kubernetes 中的服务发现与负载均衡

    原文:https://www.infoq.cn/article/rEzx9X598W60svbli9aK (本文转载自阿里巴巴云原生微信公众号(ID:Alicloudnative)) 一.需求来源 为 ...

  4. Docker学习笔记之在开发环境中使用服务发现

    0x00 概述 服务发现应用是很多服务化系统的组成部分,所以在开发.测试环境中也就有必要配备一套服务发现体系来配合我们的开发.测试工作.在这一小节里,我们就来谈谈如何在 Docker 环境下部署服务发 ...

  5. 服务发现 - consul 的介绍、部署和使用

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...

  6. 服务发现之consul的介绍、部署和使用

    什么是服务发现 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是我们的重点.我们看下面的一幅图片:     图中 ...

  7. 服务发现 - consul 的介绍、部署和使用(转)

    什么是服务发现 相关源码: spring cloud demo 微服务的框架体系中,服务发现是不能不提的一个模块.我相信了解或者熟悉微服务的童鞋应该都知道它的重要性.这里我只是简单的提一下,毕竟这不是 ...

  8. .net core i上 K8S(七).netcore程序的服务发现

    上一章我们分享了k8s的网络代理模式,今天我们来分享一下k8s中的服务发现. 1.环境变量模式的服务发现 k8s默认为我们提供了通过环境变量来实现服务发现的功能,前提是 1.需要service在pod ...

  9. BeetleX服务网关之服务发现与泛域名路由

    在新版本的服务网关中提供了服务发现和泛域名路由解决功能,服务发现可以在无须配置的情况下实现服务自动注册到网关中解脱对服务配置的繁琐工作:而泛域名路由则可以针对不同的域名制定不同的负载规则. 使用con ...

  10. Spring Cloud Eureka 服务发现 4.2

      在微服务架构中,服务发现可以说是最为核心和基础的模块,该模块主要用于实现各个微服务实例的自动化注册与发现.在Spring Cloud的子项目中,Spring Cloud Netflix提供了Eur ...

随机推荐

  1. foobar2000 v1.6.14 汉化版(2023.01.12更新)

    foobar2000 v1.6.14 汉化版 -----------------------[软件截图]---------------------- -----------------------[软 ...

  2. Blinn-Phong

    为什么出现Blinn-Phong 虽然Phong性能较高,但是在某些镜面反射条件下就会失效.比如下图,我们明显发现了一条明显的亮暗边界线,这在实际场景中是不应该发生的(实际场景中不会出现这种明显的过渡 ...

  3. Nodejs C++插件(N-API)

    Nodejs C++插件(N-API) 0. 环境搭建 1. JS中调用C++方法 1.1 JS中调用源文件的C++方法 1.2 JS中调用动态库的C++方法 2. C++中调用JS方法 2.1. C ...

  4. 【官宣】2024 DTC数据技术嘉年华全议程发布:汇聚行业精英,共襄年度盛宴

    龙腾四海内,风云际会时.由墨天轮数据社区和中国数据库联盟(ACDU)主办的第十三届数据技术嘉年华 将于2024年4月12日至13日在北京新云南皇冠假日酒店盛大召开.本次大会的主题是"智能·云 ...

  5. python 生成requirements 文件

    python 要生成 requirements文件 有两种情况 具有独立的虚拟环境 全局环境 具有独立的虚拟环境 pip freeze > requirements.txt 全局环境 安装 pi ...

  6. ASP.NET实现网站发布及跨域访问

    1.软件下载及安装 visual studio 2012 or 2013 启用电脑IIS配置 2.网页编写及排版 在visual studio中创建web项目添加aspx页面(个人网页:和html差不 ...

  7. KubeSphere 社区双周报|2024.03.15-03.29

    KubeSphere 社区双周报主要整理展示新增的贡献者名单和证书.新增的讲师证书以及两周内提交过 commit 的贡献者,并对近期重要的 PR 进行解析,同时还包含了线上/线下活动和布道推广等一系列 ...

  8. 10个一行Python代码:利用sort()函数进行高效排序

    今天我们要玩点有趣的--用一行代码来展示sort()函数的超级能力!通常,排序算法可能让你觉得是编程中的"重量级选手",但有了Python的sort(),一切都变得轻而易举,甚至可 ...

  9. 整理程序员面试中HR最常问的问题

    前言 不要慌,不要怕,要调适好自己的情绪,在介绍自己的基本情况时面无表情,说的头头是道,必要的时候包装下自己,不属于你的功能也能说是你的(难不成会去查?查也查不到).不过在面试前,建议可以找自己的朋友 ...

  10. IntelliJ IDEA 设置背景图片 随机快捷更换背景图片(附高清4K背景图N张)

    前言 开发过程枯燥乏味,何不为自己工作中添加点乐子呢,除了主题模板,我们可以设置IntelliJ IDEA 的背景图片,换个背景图,换个心情. IntelliJ IDEA 设置背景图片 注意: 必要的 ...