1、eureka服务搭建省略
2、consume——v1服务的配置
server.port=8087
spring.application.name=consume-server
eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.client.service-url.defaultZone=http://localhost:8080/eureka
spring.main.allow-bean-definition-overriding=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
eureka.instance.metadata-map.version=v2
3、consume——v2服务的配置
server.port=8086
spring.application.name=consume-server
eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.client.service-url.defaultZone=http://localhost:8080/eureka
spring.main.allow-bean-definition-overriding=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
eureka.instance.metadata-map.version=v1
4、zuul服务
pom依赖
org.springframework.cloud spring-cloud-starter-netflix-eureka-client 2.1.6.RELEASE org.springframework.cloud spring-cloud-starter-netflix-zuul 2.1.6.RELEASE io.jmnarloch ribbon-discovery-filter-spring-cloud-starter 2.1.0
配置
server.port=8082
spring.application.name=zuul-server
eureka.instance.hostname=${spring.cloud.client.ip-address}
eureka.client.service-url.defaultZone=http://localhost:8080/eureka
spring.main.allow-bean-definition-overriding=true
management.endpoints.web.exposure.include=*
management.endpoint.health.show-details=always
zuul.routes.consume.path=/consume
@Component
public class MyZuulFilter extends ZuulFilter {
@Override
public String filterType() {
return FilterConstants.ROUTE_TYPE;
}
@Override
public int filterOrder() {
return 1;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public Object run() throws ZuulException {
RequestContext currentContext = RequestContext.getCurrentContext();
HttpServletRequest request = currentContext.getRequest();
// 正常的逻辑就是先获取token,在解析token 获取用信息,查看是否已经具备了内测的资格;
// 为了方便演示这里就写死了
String version = request.getParameter("version");
if("v1".equals(version)){
RibbonFilterContextHolder.getCurrentContext().add("version","v1");
}else if("v2".equals(version)){
RibbonFilterContextHolder.getCurrentContext().add("version","v2");
}else {
RibbonFilterContextHolder.getCurrentContext().remove("version");
}
return null;
}
}
5、测试
直接访问——轮询
指定版本v1访问
指定版本v2访问



