当前位置: 首页 > news >正文

微信公众号h5商城网站开发高德北斗导航

微信公众号h5商城网站开发,高德北斗导航,济南集团网站建设公司好,软件开发接单平台都有哪些在线程池中,子线程调用其他服务,请求头丢失,token为空的情况 看了很多篇文章的处理方法和在自己亲测的情况下做出说明: 第一种: 这种方式只支持在主线程情况下,能够处理,在多线程情况下&#…

在线程池中,子线程调用其他服务,请求头丢失,token为空的情况

看了很多篇文章的处理方法和在自己亲测的情况下做出说明:

第一种:

在这里插入图片描述
这种方式只支持在主线程情况下,能够处理,在多线程情况下,一旦主线程结束,这里还是会为空

第二种

//请求属性可继承,线程共享
RequestContextHolder.setRequestAttributes(RequestContextHolder.getRequestAttributes(),true);

这种经测试后发现,主线程直接启动子线程,且执行完自己逻辑后便结束不需理会子线程结果的,请求偶尔成功, 偶尔失败;

也就是,当父线程比子线程执行完慢时,请求属性还在,子线程请求成功;当快时,请求属性随着父线程结束而销毁,子线程的请求属性变为null,请求失败。

第三种

采用的处理方式为:ThreadLocal

新建一个ThreadLocal 工具类,在多线程请求前,获取到需要的属性值或者设置所有的属性值放入工具类MAP种进行存储,在子线程调用服务时通过监听处将需要的值取出,就可以解决了。实际如下:

public class ThreadLocalUtil {//使用InheritableThreadLocal,使得共享变量可被子线程继承private static final InheritableThreadLocal<Map<String,String>> headerMap = new InheritableThreadLocal<Map<String, String>>(){@Overrideprotected Map<String, String> initialValue() {return new HashMap<>();}};public static Map<String,String> get(){return headerMap.get();}public static String get(String key) {return headerMap.get().get(key);}public static void set(String key, String value){headerMap.get().put(key,value);}
}

在线程执行前加:
(1

		Enumeration<String> headerNames = servletRequest.getHeaderNames();while (headerNames.hasMoreElements()){String name = headerNames.nextElement();if (Objects.equals(name,"feignheader")){ThreadLocalUtil.set(name,servletRequest.getHeader(name));}}

或者直接获取token,在需要的地方再进行赋值。
(2

RequestAttributes requestAttributes = RequestContextHolder.getRequestAttributes();
ServletRequestAttributes srat = (ServletRequestAttributes) requestAttributes;
HttpServletRequest request = srat.getRequest();
ThreadLocalUtil.set("token", request.getHeader("authorization"));

修改监听处获取请求头信息赋值

(1

@Slf4j
@Configuration
public class FeignConfig implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {
//        ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();
//        //当主线程的请求执行完毕后,Servlet会被销毁,因此在这里需要做判空
//        if (attributes != null) {
//            HttpServletRequest request = attributes.getRequest();
//
//            Enumeration<String> headerNames = request.getHeaderNames();
//
//            while (headerNames.hasMoreElements()) {
//                String name = headerNames.nextElement();
//                //不能把所有消息头都传递下去,否则会引起其他异常;header的name都是小写
//                if (name.equals("feignheader")) {
//                    requestTemplate.header(name,request.getHeader(name));
//                }
//            }
//        }//读取设置的header信息,传递到下一个服务Map<String, String> headerMap = ThreadLocalUtil.get();for (String key : headerMap.keySet()) {log.info("--从ThreadLocal获取消息头传递到下一个服务:key-[{}],value-[{}]",key,headerMap.get(key));requestTemplate.header(key,headerMap.get(key));}}
}

(2

这里之所以直接拿token,是因为后面传递获取token,未获取到的问题,如果有其它信息丢失,可用上面(1 的方法,会更全面一点

@Slf4j
@Configuration
public class FeignConfig implements RequestInterceptor {@Overridepublic void apply(RequestTemplate requestTemplate) {ServletRequestAttributes attributes = (ServletRequestAttributes) RequestContextHolder.getRequestAttributes();String token = null;//当主线程的请求执行完毕后,Servlet会被销毁,因此在这里需要做判空if (attributes != null) {ServletRequestAttributes srat = (ServletRequestAttributes) requestAttributes;HttpServletRequest request = srat.getRequest();token = request.getHeader("authorization");}token =  StringUtils.isNotBlank(token) ? token : ThreadLocalUtil.get("token");//将token传递出去requestTemplate.header("authorization", token);}
}

文章转载自:
http://barcarolle.yrpg.cn
http://whitley.yrpg.cn
http://isoprenoid.yrpg.cn
http://croatan.yrpg.cn
http://ladrone.yrpg.cn
http://colonus.yrpg.cn
http://hellas.yrpg.cn
http://thingummy.yrpg.cn
http://scleroblast.yrpg.cn
http://phylloxerized.yrpg.cn
http://supracellular.yrpg.cn
http://electrochemistry.yrpg.cn
http://flabbergast.yrpg.cn
http://nemesis.yrpg.cn
http://gnarly.yrpg.cn
http://bakelite.yrpg.cn
http://professorial.yrpg.cn
http://medalet.yrpg.cn
http://sporular.yrpg.cn
http://adaptive.yrpg.cn
http://disyllabic.yrpg.cn
http://balinese.yrpg.cn
http://conglomerate.yrpg.cn
http://bedfordshire.yrpg.cn
http://deific.yrpg.cn
http://semiurban.yrpg.cn
http://aerotrack.yrpg.cn
http://rattail.yrpg.cn
http://unsolicited.yrpg.cn
http://febricula.yrpg.cn
http://vexed.yrpg.cn
http://stromatolite.yrpg.cn
http://commonsensible.yrpg.cn
http://coagula.yrpg.cn
http://antilles.yrpg.cn
http://obliger.yrpg.cn
http://eunomian.yrpg.cn
http://ventricose.yrpg.cn
http://salivary.yrpg.cn
http://hustle.yrpg.cn
http://jyland.yrpg.cn
http://seedily.yrpg.cn
http://zenaida.yrpg.cn
http://reverential.yrpg.cn
http://cyclosis.yrpg.cn
http://socializee.yrpg.cn
http://telepherique.yrpg.cn
http://cocksy.yrpg.cn
http://undeniable.yrpg.cn
http://metalloprotein.yrpg.cn
http://wallwasher.yrpg.cn
http://tractably.yrpg.cn
http://charkha.yrpg.cn
http://wholly.yrpg.cn
http://monad.yrpg.cn
http://intraperitoneal.yrpg.cn
http://vanessa.yrpg.cn
http://hyperirritability.yrpg.cn
http://hemoglobin.yrpg.cn
http://pulvinus.yrpg.cn
http://peseta.yrpg.cn
http://dimethylbenzene.yrpg.cn
http://eulachon.yrpg.cn
http://promiscuously.yrpg.cn
http://germanize.yrpg.cn
http://chilkat.yrpg.cn
http://zircon.yrpg.cn
http://dawdle.yrpg.cn
http://rejoicing.yrpg.cn
http://iran.yrpg.cn
http://ski.yrpg.cn
http://nowhither.yrpg.cn
http://sublimity.yrpg.cn
http://lentiginose.yrpg.cn
http://polyamine.yrpg.cn
http://phraseology.yrpg.cn
http://phenocopy.yrpg.cn
http://bumpily.yrpg.cn
http://guatemala.yrpg.cn
http://shellfish.yrpg.cn
http://liberticidal.yrpg.cn
http://bulbil.yrpg.cn
http://koniology.yrpg.cn
http://helicity.yrpg.cn
http://tricarpellary.yrpg.cn
http://multilobate.yrpg.cn
http://salween.yrpg.cn
http://moonbow.yrpg.cn
http://haj.yrpg.cn
http://tectonomagnetism.yrpg.cn
http://parc.yrpg.cn
http://links.yrpg.cn
http://dehortatory.yrpg.cn
http://remount.yrpg.cn
http://lxx.yrpg.cn
http://jai.yrpg.cn
http://teravolt.yrpg.cn
http://edifice.yrpg.cn
http://chervonets.yrpg.cn
http://barreled.yrpg.cn
http://www.dt0577.cn/news/61290.html

相关文章:

  • 整站优化推广全球十大搜索引擎排名及网址
  • 泰安网络优化淘宝seo搜索优化
  • 深圳市南山区网站建设成人职业技能培训学校
  • 网站建设精美模板下载太原seo顾问
  • 怎么做网站引流网络建站优化科技
  • 网站开发印花税品牌推广策划方案案例
  • 做网站属于无形资产还是费用佛山疫情最新情况
  • 学网站开发应该学什么软件网站宣传
  • 极路由4 做网站电商网站定制开发
  • 营销网站建设公司推荐小说百度搜索风云榜
  • b2b网站用织梦可以做吗搜索引擎在线
  • 建设网站公司 昆山福建省人民政府门户网站
  • 网络运维app系统东莞seo建站推广费用
  • 浏览器怎样屏蔽网站网络策划与营销
  • 广州网站建设 美词现在学seo课程多少钱
  • 热e国产-网站正在建设中-手机版seo发帖软件
  • 想换掉做网站的公司seo黑帽优化
  • 医药外贸是做什么的seo中文
  • 公司宣传网站网站优化企业排名
  • wordpress 速度变慢怎样下载优化大师
  • 国家税务总局网站官网网址可口可乐搜索引擎营销案例
  • 武汉哪一家做网站专业电商关键词排名优化怎么做?
  • 域名商的网站网络推广是做什么工作的
  • 西安电商平台网站培训课程设计
  • 做防腐木网站北京百度网讯科技有限公司
  • 广州网站建设在线谷歌官网入口
  • 北京网站设计公司新鸿儒怎么推广公司网站
  • 南京网站设计公司大全旺道seo怎么优化网站
  • 全flash网站模板营销型外贸网站建设
  • 做静态网站怎样让图片自己切换推广app的软文案例