你有non-jvm语言也想使用Eureka,Ribbon和Config Server? Spring Cloud Netflix Sidecar灵感来自Netflix Prana,它包含一个简单的http api去获取给定服务的所有实例(主机和端口)。你也可以通过嵌入式Zuul代理代理服务调用,Zuul 代理从Eureka获取全部路由信息。可直接通过主机查找或通过Zuul代理访问Spring Cloud Config Server。non-jvm程序需要实现健康检查,这样Sidecar 才能向eureka 报告程序是否在线或宕机。
要把Sidecar 引入到你的项目中,只需加入依赖 group:org.springframework.cloudartifact ,artifact id :spring-cloud-netflix-sidecar。
要启用Sidecar ,创建一个Spring Boot应用并包含@EnableSidecar注释。这个注释由@EnableCircuitBreaker,@EnableDiscoveryClient和@EnableZuulProxy构成。把这个non-jvm应用在同一台主机上跑起来。
配置Sidecar,在application.yml中增加sidecar.port和sidecar.health-uri。sidecar.port属性是non-jvm应用的监听端口。这样Sidecar能够注册应用到Eureka中。sidecar.health-uri是一个non-jvm应用的可访问uri模拟Spring Boot的健康检查。uri应该返一个如下的json文档:
health-uri-document.
{ "status":"UP" }
这是一个Sidecar应用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并返回两个不同主机的实例。这个api non-jvm应用也能访问(如果是sidecar,端口是5678)地址是:
http://localhost:5678/hosts/{serviceId}
.
/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代理为每个以/<serviceId>被eureka已知的服务原子的添加路由,so the customers service is available at
/customers。non-jvm应用能够通过http://localhost:5678/customers访问客户服务(假设sidecar监听5678端口)
如果Config Server注册到Eureka,non-jvm应用能够通过Zuul 代理访问。如果ConfigServer的 serviceId是configserver并且Sidecar 监听的端口是5678,那么Config Server能通过http://localhost:5678/configserver 访问。
non-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
原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98831.html