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.portsidecar.health-uri添加到application.ymlsidecar.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