
Steeltoe Samples 服务发现实战Consul 与 Eureka 双引擎注册接入完整指南【免费下载链接】SamplesSteeltoe samples and reference application collection项目地址: https://gitcode.com/gh_mirrors/samples40/SamplesSteeltoe Samples 是 .NET 微服务框架 Steeltoe 的官方示例项目集其中 Discovery 目录下的 FortuneTeller 示例完整演示了服务发现Service Discovery的核心玩法服务提供方同时向Consul和Eureka两大注册中心完成服务注册服务消费方则通过注册中心动态解析服务地址实现微服务之间的自动发现与调用。本指南将带你一步步跑通这套.NET 微服务服务发现流程从环境准备、注册中心启动到服务注册与消费调用全链路实战无需深入了解底层原理也能快速上手。为什么微服务需要服务发现机制在单体应用中服务地址写死即可。但在微服务架构下实例数量动态伸缩、IP 与端口随时变化如果客户端仍硬编码地址必然导致系统崩溃。服务发现Service Discovery正是解决这一痛点的机制服务注册服务启动时主动向注册中心上报自己的地址服务发现调用方从注册中心查询目标服务的真实地址健康检查注册中心定期探测实例存活状态自动摘除故障节点。Steeltoe 官方为此提供了基于配置、Consul、Eureka 三种服务发现实现本次实战将聚焦最常用的 Consul 与 Eureka 双引擎。认识 FortuneTeller 示例项目结构 整个示例位于仓库Discovery目录下由三个子项目构成职责划分非常清晰项目角色说明FortuneTellerApi服务提供方提供随机签文 API启动时向 Consul / Eureka 注册FortuneTellerWeb服务消费方MVC 网站通过服务发现调用 APIFortuneTellerConsole服务消费方控制台程序同样的消费逻辑关键的源码文件路径如下建议对照阅读服务注册主逻辑FortuneTellerApi/Program.cs服务消费主逻辑FortuneTellerWeb/Program.cs消费端 HTTP 调用封装FortuneTellerWeb/Services/FortuneService.cs启动配置多套 ProfileFortuneTellerApi/Properties/launchSettings.json 与 FortuneTellerWeb/Properties/launchSettings.json完整运行手册FortuneTeller/README.md 核心设计亮点消费方只需访问https://fortuneService/api/fortunes/random这个虚拟地址fortuneService会被服务发现机制自动替换为真实的主机名与端口这就是服务发现的精髓所在。环境准备一套搞定双注册中心 ️开始前请确认你的机器已满足以下条件安装 .NET 10 SDK示例基于最新 .NET 版本编写Docker用于快速启动 Consul 与 Eureka 注册中心可选Cloud Foundry 环境用于云端部署验证。首次使用请先获取项目源码git clone https://gitcode.com/gh_mirrors/samples40/Samples克隆完成后进入Discovery/src/FortuneTeller目录即可开始下面的实战步骤。第一步启动 Consul 注册中心在终端中运行 Docker 命令拉起 Consul 容器管理控制台默认监听8500端口docker run -d -p 8500:8500 -p 8600:8600/udp hashicorp/consul第二步启动 Eureka 注册中心同样使用 Docker 启动 Eureka 服务端默认端口为8761docker run -d -p 8761:8761 steeltoeoss/eureka-server两个注册中心就绪后我们开始接入实战。Consul 服务注册接入步骤两行代码激活 ✅打开 FortuneTellerApi/Program.cs你会发现服务发现的接入异常简洁——核心只有两行builder.Services.AddConsulDiscoveryClient(); builder.Services.AddEurekaDiscoveryClient();Steeltoe 把注册逻辑全部封装在扩展方法里同时注册双引擎也互不冲突。接下来按以下步骤运行使用Consul启动配置Profile启动服务提供方cd FortuneTellerApi dotnet run --launch-profile Consul浏览器访问签文接口验证服务正常https://localhost:7251/api/fortunes/random打开 Consul 管理台http://localhost:8500即可看到fortuneService已成功注册也可以通过 Services API/v1/agent/services和 Health API/v1/agent/checks查看注册与健康详情。 关键配置解析ConsulProfile 通过环境变量激活客户端——Consul__Discovery__Enabledtrue开启注册Consul__Discovery__HostNamelocalhost指定注册主机名全部配置可在 launchSettings.json 中查看。Eureka 服务注册接入步骤同样简单 切换到EurekaProfile启动服务提供方cd FortuneTellerApi dotnet run --launch-profile Eureka然后打开 Eureka 控制台http://localhost:8761/你会看到FORTUNESERVICE已经出现在实例列表中。对应的激活配置为Eureka__Client__Enabledtrue与Eureka__Instance__HostNamelocalhost。⚠️ 注意示例中的 Eureka 配置为了快速响应变化做了调优牺牲部分性能生产环境请勿直接套用通常 Eureka 中的变更需要几分钟才会生效。服务消费端接入三引擎同时加载 ️服务提供方注册完成后轮到消费方登场。在 FortuneTellerWeb/Program.cs 中消费端一次性加载了三种发现客户端builder.Services.AddConsulDiscoveryClient(); builder.Services.AddEurekaDiscoveryClient(); builder.Services.AddConfigurationDiscoveryClient();随后将 HTTP 客户端与发现机制绑定这是调用服务的点睛之笔builder.Services.AddHttpClientFortuneService(httpClient httpClient.BaseAddress new Uri(https://fortuneService/api/fortunes/)) .AddServiceDiscovery();配置式发现无需注册中心的兜底方案除了 Consul 与 Eureka示例还演示了配置式服务发现——服务实例直接写在配置文件中适合本地开发与简单场景。启动 Web 应用cd FortuneTellerWeb dotnet run --launch-profile Consul浏览器访问https://localhost:7233如果页面正常显示随机签文说明从注册中心查询地址 → 解析 fortuneService → 调用 API的完整链路已经跑通。同样的dotnet run --launch-profile Eureka即可切换到 Eureka 消费模式。服务健康检查让注册中心看得见故障 ❤️服务发现的价值不仅在于注册更在于健康状态的实时反馈。示例提供了两种健康检查方案方案一TTL 心跳Consul 默认FortuneTellerApi 定期向 Consul 发送 TTL 心跳超时未续约即被判定为失联。这是ConsulProfile 的默认行为。方案二Actuator 健康端点轮询使用ConsulActuator或EurekaActuatorProfile 时注册中心改为轮询/actuator/health端点判断存活。示例中的 ExampleHealthContributor.cs 专门演示了这一机制以ConsulActuator启动等待片刻后刷新 Health API观察状态变为passing类型http修改 Program.cs 中的健康状态为HealthStatus.Down重启应用再次刷新状态变为critical——注册中心成功识别出故障实例 这个小实验直观展示了健康检查如何让注册中心自动标记异常实例避免请求被路由到死服务。进阶实战动态端口与发现优先配置 示例还内置了两个高级玩法值得一试动态端口绑定EurekaDynamicPorts使用EurekaDynamicPortsProfile 启动ASP.NET 会自动分配端口。由于端口分配发生在注册之后Steeltoe 会给实例 ID 追加随机数避免冲突。启动后访问 Eureka API/eureka/apps查看实际分配的端口号再访问https://localhost:端口号/api/fortunes/random即可验证。发现优先的 Config ServerDiscovery-FirstFortuneTellerApi 还演示了配置中心的发现优先模式Config Server 启动时向 Eureka 注册Api 通过 Eureka 解析 Config Server 的地址而不是写死配置。运行后访问/api/configuration端点观察配置来源地址的变化即可理解这一模式的妙处。云端部署一步迁移到 Cloud Foundry ☁️本地验证完成后你还可以将整套示例部署到 Tanzu Platform for Cloud Foundrycf create-service p.service-registry your-plan sampleDiscoveryService --wait然后在 FortuneTellerApi 与 FortuneTellerWeb 目录下分别执行cf push即可。Windows 环境需先执行dotnet publish -r win-x64 --self-contained再推送详细步骤可查阅 FortuneTeller/README.md 的 Cloud Foundry 章节。总结一条公式掌握 Steeltoe 服务发现 ✨回顾整个实战Steeltoe 服务发现的接入公式可以浓缩为三步注册端AddConsulDiscoveryClient()/AddEurekaDiscoveryClient()一行开启客户端配置端通过 Profile 或环境变量激活对应引擎Enabledtrue消费端AddHttpClientT().AddServiceDiscovery()让 HTTP 调用自动走服务发现。配合launchSettings.json中预设的多套 Profile你可以在 Consul、Eureka、配置式三种模式间自由切换零代码改动。这套FortuneTeller 双引擎注册示例不仅是学习 Steeltoe 服务发现的绝佳教材更是你搭建生产级 .NET 微服务注册中心的可靠参考模板。现在就 clone 下来亲手跑通你的第一个服务发现集群吧【免费下载链接】SamplesSteeltoe samples and reference application collection项目地址: https://gitcode.com/gh_mirrors/samples40/Samples创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考