# Spring Cloud 可以和Consul搭配,也可以和Eureka搭配
# API 网关是服务端和客户端的中间层
Zuul可以拿来当网关
Zuul可以和Consul搭配
# 为了解决灰度发布的问题zuul要能对一组服务做下管理
# 服务可以有metadata-map信息 这个信息还能存储到eureka里 还能被ribbon取出来
# zuul是网关,ribbon是负载均衡,eureka是注册中心
# ZUUL 有过滤器 filter 可以自己实现
@RequestMapping("/call")
public String call() {
ServiceInstance grayServiceInstance=null;
//拿到所有的服务实例
List<ServiceInstance> servicesList = discoveryClient.getInstances("service-producer");
for (Iterator iterator = servicesList.iterator(); iterator.hasNext();) {
ServiceInstance serviceInstance = (ServiceInstance) iterator.next();
Map<String, String> map = serviceInstance.getMetadata();
//找到带版本号的实例做灰度服务,其他服务是正常服务
if (map.containsKey("version")) {
System.out.println(map.get("version"));
grayServiceInstance=serviceInstance;
}
}
System.out.println("服务地址:" + grayServiceInstance.getUri());
System.out.println("服务名称:" + grayServiceInstance.getServiceId());
String callServiceResult = new RestTemplate().getForObject(grayServiceInstance.getUri().toString() + "/hello",
String.class);
System.out.println(callServiceResult);
return callServiceResult;
}