在spring-cloud-zuul中使用WebSockets

问题背景

最近的项目中需要用到WebSocket的微服务,直接使用了Spring Cloud的Zuul来做路由。然而,Zuul对WebSocket的支持不是那么友好,需要配置一下。

@Component
public class WebSocketFilter extends ZuulFilter {
    @Override
    public String filterType() {
        return "pre";
    }
    @Override
    public int filterOrder() {
        return 0;
    }
    @Override
    public boolean shouldFilter() {
        return true;
    }
    @Override
    public Object run() {
        RequestContext context = RequestContext.getCurrentContext();
        HttpServletRequest request = context.getRequest();
        String upgradeHeader = request.getHeader("Upgrade");
        if (null == upgradeHeader) {
            upgradeHeader = request.getHeader("upgrade");
        }
        if (null != upgradeHeader && "websocket".equalsIgnoreCase(upgradeHeader)) {
            context.addZuulRequestHeader("connection", "Upgrade");
        }
        return null;
    }
}

另外,Spring WebSockets心跳时间默认是25s,为了能适应业务系统的需求,我们需要在Zuul中设置合理的超时时间。

hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000  #设置API网关中路由转发请求的HystrixCommand执行超时时间
ribbon:
  ConnectTimeout: 3000 #设置路由转发请求的时候,创建请求连接的超时时间
  ReadTimeout: 60000  #用来设置路由转发请求的超时时间

猜你喜欢

转载自blog.csdn.net/moshowgame/article/details/80511158
今日推荐