ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Spring Cloud Alibaba Sidecar 实战指南:借助 Nacos 将 Node.js 等异构语言服务无缝接入 Spring Cloud 微服务体系

Spring Cloud Alibaba Sidecar 实战指南:借助 Nacos 将 Node.js 等异构语言服务无缝接入 Spring Cloud 微服务体系 Spring Cloud Alibaba Sidecar 实战指南借助 Nacos 将 Node.js 等异构语言服务无缝接入 Spring Cloud 微服务体系【免费下载链接】spring-cloud-alibabaSpring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.项目地址: https://gitcode.com/gh_mirrors/sp/spring-cloud-alibaba导读本篇指南以仓库中的 spring-cloud-alibaba-sidecar-examples 示例项目为蓝本系统讲解如何利用Nacos 注册中心 Spring Cloud Alibaba Sidecar将一个非 Java异构语言微服务接入 Spring Cloud 微服务体系。读完本文你将掌握 Sidecar 的完整接入流程环境准备、依赖引入、配置编写、服务启动、注册验证与跨语言调用并能理解其底层健康检查与自动注册/注销机制直接复用于 Python、Node.js、Go 等语言的服务接入场景。一、为什么需要 Sidecar异构语言服务的接入困境在 Java 微服务体系中Nacos 负责服务注册发现Spring Cloud Gateway / LoadBalancer / Feign 等组件共同支撑服务间调用。然而当团队中存在使用 Node.js、Python、Go 等语言编写的服务时这些服务天然无法直接接入 Spring Cloud 的注册、发现与治理链路。Spring Cloud Alibaba Sidecar对应示例目录 spring-cloud-alibaba-sidecar-examples正是为了解决这个问题而设计的框架它作为一个边车Sidecar进程将异构语言微服务代理进 Spring Cloud 生态对外表现为一个普通的 Java 微服务。对于体系内的其他服务而言访问异构服务与访问任何其他 Java 微服务没有任何区别。说明Sidecar 本身是一个 Spring Boot / Spring Cloud 应用它内置健康检查探测与实例注册能力。本文聚焦 Nacos 作为注册中心的场景仓库同时提供了 Consul 版本示例原理相同。二、工作原理解读从源码看 Sidecar 的三大核心组件在动手配置之前先通过仓库源码理解 Sidecar 的运行机制这有助于后续排查问题。Sidecar Starter 的源码位于 spring-cloud-starter-alibaba-sidecar 模块核心组件如下2.1 配置模型SidecarPropertiesSidecarProperties.java 使用ConfigurationProperties(sidecar)绑定sidecar.*前缀的配置关键字段与约束配置项类型说明约束/默认值sidecar.ipString异构语言服务的 IP 地址可空为空时健康检查逻辑默认按127.0.0.1处理sidecar.portInteger异构语言服务的端口必填范围1 ~ 65535默认值1sidecar.health-check-urlURI异构服务的健康检查端点返回 JSON 且格式遵循 Spring Boot Actuator 健康端点如{status:UP}可空不配置则默认视为 UPsidecar.health-check-intervallong健康检查的轮询间隔默认30000L30 秒2.2 自动装配SidecarAutoConfigurationSidecarAutoConfiguration.java 完成三个关键 Bean 的装配RestTemplate用于发起对异构服务健康检查端点的 HTTP 请求SidecarHealthIndicator实现健康检查探测将异构服务的状态转化为 Sidecar 自身的健康状态SidecarHealthChecker核心调度器在应用启动时即调用check()启动周期任务。2.3 周期巡检与自动注册/注销SidecarHealthCheckerSidecarHealthChecker.java 是整个 Sidecar 的大脑其check()方法使用 Reactor 的Schedulers.single().schedulePeriodically(...)按sidecar.health-check-interval周期执行从spring.application.name读取应用名缺失时兜底为sidecar-application结合sidecar.ip与sidecar.port组装实例信息调用SidecarHealthIndicator.health()探测异构服务状态状态为UP且实例信息发生变化时通过SidecarDiscoveryClient.registerInstance(applicationName, ip, port)向注册中心注册状态非UP如DOWN、UNKNOWN时调用deregisterInstance注销实例从而保证注册中心中只存在健康实例。由此可以看出健康检查结果直接驱动实例在注册中心的上线下线这是 Sidecar 保证异构服务可用性的核心机制。健康探测的具体逻辑在 SidecarHealthIndicator.java它通过RestTemplateGET 请求health-check-url解析响应体中的status字段如UP/DOWN若未配置该 URL 直接判定为 UP若请求异常则判定为 DOWN 并附带错误详情若响应中无status字段则判定为 UNKNOWN 并给出 warning。针对 Nacos 场景SidecarNacosDiscoveryClient.java 实现了SidecarDiscoveryClient接口通过NacosServiceManager获取NamingService完成registerInstance/deregisterInstance的调用从源码可见注册时携带了分组信息group这正是配置文件中spring.cloud.nacos.discovery.group参数的作用。三、准备工作下载并启动 Nacos在接入 Sidecar 之前必须首先启动 Nacos 服务器。本文示例以 Nacos 作为注册中心。下载 Nacos 二进制发行包并解压建议使用 2.x 版本进入解压目录下的bin目录以单机模式启动。注意不要通过双击启动双击默认会以集群方式启动startup.cmd -m standalone浏览器访问localhost:8848/nacos即可看到 Nacos 控制台界面默认用户名与密码均为nacos。四、Step 1引入依赖以仓库中的 spring-cloud-alibaba-sidecar-nacos-example 项目为例在pom.xml中引入如下依赖dependency groupIdorg.springframework.cloud/groupId artifactIdspring-cloud-starter-gateway-server-webflux/artifactId /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-sidecar/artifactId /dependency dependency groupIdcom.alibaba.cloud/groupId artifactIdspring-cloud-starter-alibaba-nacos-discovery/artifactId /dependency各依赖的作用spring-cloud-starter-gateway-server-webflux为 Sidecar 提供网关能力使体系内的其他服务能够通过网关路由访问异构服务对应配置中的spring.cloud.gateway.discovery.locator.enabledspring-cloud-starter-alibaba-sidecarSidecar 核心 Starter提供健康检查、实例注册等能力spring-cloud-starter-alibaba-nacos-discovery提供 Nacos 注册发现能力Sidecar 借此将异构服务注册到 Nacos。完整的依赖清单可查看示例项目的 pom.xml其中还包含spring-boot-starter-actuator暴露健康端点与spring-cloud-starter-loadbalancer客户端负载均衡支持。五、Step 2配置 Sidecar 相关信息在项目的src/main/resources/application.yml中写入以下配置server: port: 8070 spring: cloud: nacos: username: nacos password: nacos discovery: server-addr: 127.0.0.1:8848 group: test gateway: discovery: locator: enabled: true application: name: node-service # sidecar 相关的配置 sidecar: # 异构微服务的 IP ip: 127.0.0.1 # 异构微服务的端口 port: 8060 # 异构微服务的健康检查 URL不配置的话默认会认为是 UP health-check-url: http://localhost:8060/health.json # springboot actuator 监控相关 management: endpoint: health: show-details: always配置要点解析配置段含义spring.application.name: node-service异构服务在注册中心中的服务名。从 SidecarHealthChecker 源码 可见注册实例时应用名取自该配置sidecar.ip/sidecar.port异构服务实际的 IP 与端口Sidecar 将以此信息向注册中心注册sidecar.health-check-url健康检查探测地址需返回符合 Spring Boot Actuator 格式的 JSONspring.cloud.nacos.discovery.server-addr/username/passwordNacos 服务器地址与登录凭证spring.cloud.nacos.discovery.group注册分组注册实例时随实例一并上报spring.cloud.gateway.discovery.locator.enabled: true开启基于服务发现的网关路由使外部可通过网关访问异构服务management.endpoint.health.show-details: always打开健康端点详情便于观察 Sidecar 健康检查结果健康检查响应格式说明health-check-url指向的任意 REST 服务只需返回正确格式的健康检测 JSON 即可例如{ status: DOWN }将status改为UP即表示服务健康。仓库为演示场景提供了真实的 Node.js 异构服务脚本 node-service.js它监听8060端口访问根路径/返回{index:欢迎来到首页}访问/health.json返回{status:UP}其余路径返回404正好与本示例的健康检查地址http://localhost:8060/health.json和业务访问地址相呼应。提示原文档场景中localhost:8060是通过本机 nginx 代理的health.json请求实际使用时该地址可以是任意语言实现的 REST 服务端点。六、Step 3启动异构服务与 Sidecar 应用分别启动两端的服务1. 启动异构服务。若使用仓库提供的 Node.js 示例在 spring-cloud-alibaba-sidecar-examples 目录下执行node node-service.js看到输出listening on localhost:8060即表示启动成功。2. 启动 Sidecar 应用。在 IDE 中直接启动找到主类com.alibaba.cloud.sidecar.DemoApplication执行main方法。DemoApplication.java 的实现值得注意SpringBootApplication LoadBalancerClients({ LoadBalancerClient(node-service) }) public class DemoApplication { public static void main(String[] args) { SpringApplication.run(DemoApplication.class, args); } }它通过LoadBalancerClientsLoadBalancerClient(node-service)为异构服务node-service声明了负载均衡客户端这保证了后续服务间调用具备负载均衡能力依赖 pom.xml 中的spring-cloud-starter-loadbalancer。说明本文以spring-cloud-alibaba-sidecar-nacos-example项目为例因此启动的是该项目下的DemoApplication。Consul 版本的 DemoApplication.java 结构完全一致。七、Step 4查看服务注册情况Sidecar 启动后其健康检查任务会立刻开始执行探测到异构服务返回{status:UP}后便会以spring.application.name即node-service为服务名、以sidecar.ip:sidecar.port即127.0.0.1:8060为实例地址向 Nacos 注册中心完成注册。打开 Nacos 控制台localhost:8848/nacos在服务列表中即可看到node-service已成功注册其分组为配置中指定的test。此时这个异构服务已经成功融入 Spring Cloud 微服务体系。八、Step 5访问异构服务对于 Spring Cloud 微服务体系内的服务而言访问异构服务与访问任何 Java 微服务没有任何区别。通过 Sidecar 网关直接访问http://127.0.0.1:8070/node-service/health.json其中8070是 Sidecar 应用的server.portnode-service是服务名health.json是异构服务对外提供的路径。能正常返回 JSON 数据即说明整合成功。这正体现了 Spring Cloud Alibaba Sidecar 的价值异构服务只需按约定提供健康检查端点和业务端点其余注册、发现、负载均衡、网关路由等治理能力全部由 Sidecar 代理完成接入成本极低。九、补充说明与扩展健康检查驱动的动态上下线从 SidecarHealthChecker 源码可以确认当异构服务健康检查失败状态变为DOWN等时Sidecar 会主动从注册中心注销该实例恢复健康后再次注册。因此通过调整sidecar.health-check-interval默认 30 秒可以控制状态变更的收敛速度。健康检查失败时的排查若实例始终未出现在注册中心可先确认health-check-url是否返回了含status字段的合法 JSON以及 Sidecar 应用的/actuator/health端点详情得益于show-details: always配置中sidecar指标的具体状态与错误信息。多注册中心支持Sidecar 通过SidecarDiscoveryClient抽象了注册中心差异仓库同时提供 NacosSidecarNacosDiscoveryClient与 Consulconsul 目录两种实现可按需切换。进一步阅读示例项目的完整工程结构见 spring-cloud-alibaba-sidecar-examplesSidecar Starter 全部源码见 spring-cloud-starter-alibaba-sidecar可在此基础上继续探索健康检查扩展点CustomHealthCheckHandler等高级能力。【免费下载链接】spring-cloud-alibabaSpring Cloud Alibaba provides a one-stop solution for application development for the distributed solutions of Alibaba middleware.项目地址: https://gitcode.com/gh_mirrors/sp/spring-cloud-alibaba创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表