使用 Sidecar 支持多语言
你是否有希望利用 Eureka、Ribbon 和 Config Server 的非 JVM 语言?Spring Cloud Netflix Sidecar 的灵感来自 Netflix Prana,它包含一个 HTTP API,用于获取给定服务的所有实例(按主机和端口)。你还可以通过嵌入式 Zuul 代理代理服务调用,该代理从 Eureka 获取其路由条目,可以通过主机查找或 Zuul 代理直接访问 Spring Cloud Config Server,非 JVM 应用程序应实现健康检查,以便 Sidecar 可以向 Eureka 报告应用程序是启动还是关闭。
要在项目中包含 Sidecar,请使用组 ID 为 org.springframework.cloud
和工件 IDspring-cloud-netflix-sidecar
的依赖项。
要启用 Sidecar,请使用 @EnableSidecar
创建 Spring Boot 应用程序,此注解包括 @EnableCircuitBreaker
、@EnableDiscoveryClient
和@EnableZuulProxy
,在与非 JVM 应用程序相同的主机上运行生成的应用程序。
要配置 Sidecar,请将 sidecar.port
和sidecar.health-uri
添加到 application.yml
,sidecar.port
属性是非 JVM 应用程序侦听的端口,这样 Sidecar 可以正确地向 Eureka 注册应用程序,sidecar.health-uri
是可在非 JVM 应用程序上访问的 URI,它模仿 Spring Boot 健康指示器,它应该返回类似于以下内容的 JSON 文档:
health-uri-document
{"status":"UP"}
以下 application.yml
示例显示了 Sidecar 应用程序的示例配置:
server:
port: 5678
spring:
application:
name: sidecar
sidecar:
port: 8000
health-uri: http://localhost:8000/health.json
DiscoveryClient.getInstances()
方法的 API 是 /hosts/{serviceId}
,以下针对/hosts/customers
的示例响应返回在不同主机上的两个实例:
/hosts/customers
[
{
"host": "myhost",
"port": 9000,
"uri": "http://myhost:9000",
"serviceId": "CUSTOMERS",
"secure": false
},
{
"host": "myhost2",
"port": 9000,
"uri": "http://myhost2:9000",
"serviceId": "CUSTOMERS",
"secure": false
}
]
非 JVM 应用程序(如果 sidecar 在端口 5678 上)可以在 http://localhost:5678/hosts/{serviceId}
访问此 API。
Zuul 代理自动将 Eureka 中已知的每个服务的路由添加到 /<serviceId>
,因此 customers 服务可在/customers
处获得,非 JVM 应用程序可以访问位于 http://localhost:5678/customers
的 customer 服务(假设 sidecar 正在侦听端口 5678)。
如果配置服务器已在 Eureka 中注册,则非 JVM 应用程序可以通过 Zuul 代理访问它,如果 ConfigServer 的 serviceId
是configserver
且 Sidecar 在端口 5678 上,则可以在 http://localhost:5678/configserver
上访问它。
非 JVM 应用程序可以利用 Config Server 返回 YAML 文档的能力,例如,调用 http://sidecar.local.spring.io:5678/configserver/default-master.yml 可能会导致 YAML 文档类似于以下内容:
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
password: password
info:
description: Spring Cloud Samples
url: https://github.com/spring-cloud-samples
要在使用 HTTPs 时将健康检查请求设置为接受所有证书,请将 sidecar.accept-all-ssl-certificates
设置为true
。