Spring Cloud搭建手册(6)——Spring Cloud Zuul

2018-02-27 11:49:22来源:oschina作者:watashi人点击

分享

1、首先在POM文件添加依赖:



org.springframework.cloud
spring-cloud-starter-zuul

2、在Spring boot入口类添加注解:


@EnableZuulProxy

3、在application.properties配置文件中配置服务路由,以上面的feign-service为例,其中find为路由名,之后通过访问http://gate-service:9001/find/**,由find路由将请求转发到feign-service服务上:


zuul.routes.hello.path=/find/**
zuul.routes.hello.serviceId=feign-service

4、增加对请求的前置过滤,例如对所有到各微服务的请求都要进行token校验:


public class AccessFilter extends ZuulFilter {
@Override
public Object run() {
RequestContext ctx = RequestContext.getCurrentContext();
HttpServletRequest request = ctx.getRequest();
Object accessToken = request.getParameter("accessToken");
if (accessToken == null) {
ctx.setSendZuulResponse(false);
ctx.setResponseStatusCode(401);
return null;
}
return null;
}
@Override
public boolean shouldFilter() {
return true;
}
@Override
public int filterOrder() {
return 0;
}
@Override
public String filterType() {
return "pre";
}
}

5、为了使过滤器生效,还需要创建对应的Bean,我们创建了一个FilterBean来配置所有的过滤器Bean:


@Configuration
public class FilterBean {
@Bean
public AccessFilter accessFilter() {
return new AccessFilter();
}
}

5、可能遇到的问题:


①Zuul转发失败,报错XX timed-out and no fallback available




原因:Zuul集成了Hystrix组件,Hystrix缺省超时判断为1秒钟,由于网络问题,有些请求超过1秒钟之后才接收到。但是由于没给Zuul开发fallback代码,所以请求失败报了这个错。


解决办法:在application.properties配置修改Hystrix的超时时间或关掉Hystrix超时。


hystrix.command.default.execution.timeout.enabled=true
hystrix.command.default.execution.isolation.thread.timeoutInMilliseconds=80000

hystrix.command.default.execution.timeout.enabled=false

②Zuul转发失败,报错Read timed out



原因:Zuul集成了Ribbon组件,当请求量过大时,后面的请求积压时间会超过Ribbon的超时时间,从而导致失败。


解决办法:在application.properties配置修改Ribbon的超时时间。


ribbon.ConnectTimeout=60000
ribbon.ReadTimeout=60000
ribbon.OkToRetryOnAllOperations=true
ribbon.MaxAutoRetriesNextServer=1
ribbon.MaxAutoRetries=0

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台