开发者社区 > 云原生 > 微服务 > 正文

Spring cloud在第一次访问SessionId会发生改变,再次刷新所有微服务就同步了

框架结构:center+feign+spring session+redis+service(多个) feign端代码:

public RequestInterceptor requestInterceptor() {
        return requestTemplate -> {
            ServletRequestAttributes attrs = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
            if (attrs != null) {
                HttpServletRequest request = attrs.getRequest();
                System.out.println("feign:"+attrs.getSessionId());
                Enumeration<String> headerNames = request.getHeaderNames();
                if (headerNames != null) {
                    while (headerNames.hasMoreElements()) {
                        String name = headerNames.nextElement();
                        Enumeration<String> values = request.getHeaders(name);
                        while (values.hasMoreElements()) {
                            String value = values.nextElement();
                            requestTemplate.header(name, value);
                        }
                    }
                }
                if(!request.isRequestedSessionIdValid()){
                    request.setAttribute(SessionRepositoryFilter.INVALID_SESSION_ID_ATTR,null);
                    requestTemplate.header("cookie","SESSION="+attrs.getSessionId());
                }
            }
        };
    }

feign在第一次转发请求后,服务节点会产生一个session,这个sessionId和feign自身产生的不一致,redis中也是出现多条记录,后续的访问都能正常同步了,sessionId都一致了,未能找到原因,跪求各位大神

本问题来自阿里云开发者社区的【11大垂直技术领域开发者社群】。 https://developer.aliyun.com/article/706511 点击链接欢迎加入感兴趣的技术领域群。

展开
收起
茶什i 2019-08-26 15:51:12 1827 0
1 条回答
写回答
取消 提交回答
  • 可能是网络原因

    2019-10-18 11:53:44
    赞同 展开评论 打赏

为微服务建设降本增效,为微服务落地保驾护航。

相关电子书

更多
微服务治理技术白皮书 立即下载
微服务与Serverless 立即下载
EDAS4.0 助力企业一站实现微服务架构转型与 K8s 容器化升级 立即下载