赞
踩
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依赖
<dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> <version>2.1.6.RELEASE</version> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-zuul</artifactId> <version>2.1.6.RELEASE</version> </dependency> <dependency> <groupId>io.jmnarloch</groupId> <artifactId>ribbon-discovery-filter-spring-cloud-starter</artifactId> <version>2.1.0</version> </dependency>
配置
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/**
zuul.routes.consume.serviceId=consume-server
filter
package com.example.zuulserver.filter; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import com.netflix.zuul.exception.ZuulException; import io.jmnarloch.spring.cloud.ribbon.support.RibbonFilterContextHolder; import org.springframework.cloud.netflix.zuul.filters.support.FilterConstants; import org.springframework.stereotype.Component; import javax.servlet.http.HttpServletRequest; /** * @author code * @Date 2021/9/27 17:12 * Description 灰度发布拦截器 * Version 1.0 */ @Component public class MyZuulFilter extends ZuulFilter { /** * 过滤器的四种类型至一 * pre 在请求之前执行 * route 在路由中执行 * post 在请求后执行 * error 在发生错误的时候执行 * @return */ @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访问
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。