20. 支持 Sidecar 的 Polyglot 支持
你有 non-jvm 语言想要利用 Eureka,Ribbon 和 Config Server 吗? Spring Cloud Netflix Sidecar 的灵感来自Netflix Prana。它包含一个简单的 http api 来获取给定服务的所有实例(即 host 和 port)。您还可以通过嵌入式 Zuul 代理代理服务 calls,该代理从 Eureka 获取其 route 条目。可以通过 host 查找或通过 Zuul 代理直接访问 Spring Cloud Config Server。 non-jvm 应用程序应实施运行状况检查,以便 Sidecar 可以在应用程序启动或关闭时向 eureka 报告。
要在项目中包含 Sidecar,请使用 group org.springframework.cloud
和 artifact id spring-cloud-netflix-sidecar
的依赖项。
要启用 Sidecar,请使用@EnableSidecar
创建 Spring Boot application。这个 annotation 包括@EnableCircuitBreaker
,@EnableDiscoveryClient
和@EnableZuulProxy
。 在与 non-jvm application 相同的 host 上运行生成的 application。
要配置侧车,请将sidecar.port
和sidecar.health-uri
添加到application.yml
。 sidecar.port
property 是 non-jvm app 正在监听的 port。这是 Sidecar 可以使用 Eureka 正确注册应用程序。 sidecar.health-uri
是一个可以在 non-jvm 应用程序上访问的 uri,它可以模仿 Spring Boot 运行状况指示器。它应该 return 一个 json 文档,如下所示:
health-uri-document.
{
"status":"UP"
}
这是 Sidecar application 的 example application.yml:
application.yml.
server:
port: 5678
spring:
application:
name: sidecar
sidecar:
port: 8000
health-uri: http://localhost:8000/health.json
DiscoveryClient.getInstances()
方法的 api 是/hosts/{serviceId}
。以下是/hosts/customers
的 example 响应,它返回不同主机上的两个实例。 应用程序(如果边车位于 port 5678 上)可以在http://localhost:5678/hosts/{serviceId}
访问此 API。
/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
}
]
Zuul 代理自动将 eureka 中已知的每个服务的 routes 添加到/<serviceId>
,因此客户服务可在/customers
处获得。 Non-jvm 应用程序可以通过http://localhost:5678/customers
访问客户服务(假设边车正在监听 port 5678)。
如果 Config Server 已注册 Eureka,non-jvm application 可以通过 Zuul 代理访问它。如果 ConfigServer 的 serviceId 是configserver
且 Sidecar 在 port 5678 上,则可以在http://localhost:5678/configserver访问它
Non-jvm app 可以利用 Config Server 的功能 return YAML 文档。对于 example,对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