框架结构: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都一致了,未能找到原因,跪求各位大神,网上很多解决方案都试过了,无效
不知道你这个问题是否已经解决, 如果还没有解决的话: