<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      Springcloud~openfeign開啟hystrix基于線程池熔斷的傳值問題

      我們都知道,在hystrix默認情況下,采用線程池的熔斷方式,每個openfeign都有自己的線程,而這使得它無法獲取主線程上的變量;現在有個現實的問題就是,當前端登錄后,把token經過gateway傳到服務A,服務A再調用服務B時,B是無法收到請求頭里的token信息的;一種不太好的解決方案就是使用信號量的方式。

      使用ThreadLocal存儲變量

      public class NextHttpHeader {
      
      	static final InheritableThreadLocal<Map<String, String>> inheritableThreadLocal = new InheritableThreadLocal<>();
      	public static void set(String key, String val) {
      		if (inheritableThreadLocal.get() == null) {
      			inheritableThreadLocal.set(MapUtils.<String, String>hashMapBuilder(8).put(key, val).build());
      		} else {
      			inheritableThreadLocal.get().put(key, val);
      		}
      	}
      
      	public static String get(String key) {
      		if (inheritableThreadLocal.get() == null) {
      			return null;
      		}
      		return inheritableThreadLocal.get().get(key);
      	}
      
      	public static Set<String> get() {
      		if (inheritableThreadLocal.get() == null) {
      			return null;
      		}
      		return inheritableThreadLocal.get().keySet();
      	}
      
      
      }
      

      繼承HystrixConcurrencyStrategy抽象類,實現自己的賦值邏輯

      public class RequestContextHystrixConcurrencyStrategy extends HystrixConcurrencyStrategy {
      
      	public <T> Callable<T> wrapCallable(Callable<T> callable) {
      		// 先包裝一下要執行的任務,在這里把ThreadLocal的值取出來
      		return new ThreadLocalCallable<T>(callable);
      	}
      
      	public static class ThreadLocalCallable<V> implements Callable<V> {
      
      		private Callable<V> target;
      
      		private Map<String, String> dic = new HashMap<>();
      
      		public ThreadLocalCallable(Callable<V> target) {
      			this.target = target;
      			NextHttpHeader.get().forEach(o -> {
      				this.dic.put(o, NextHttpHeader.get(o));
      			});
      		}
      
      		@Override
      		public V call() throws Exception {
      			this.dic.keySet().forEach(o -> {
      				NextHttpHeader.set(o, this.dic.get(o));
      			});
      			return target.call();
      		}
      
      	}
      
      }
      

      注冊

      @Configuration
      @Slf4j
      public class HystrixCircuitBreakerConfiguration {
      
      	@PostConstruct
      	public void init() {
      		HystrixPlugins.getInstance().registerConcurrencyStrategy(new RequestContextHystrixConcurrencyStrategy());
      	}
      
      }
      

      發現openFeign請求時,將變量放到請求頭

      /**
       * 基于openFeign的攔截器,處理需要向下游傳遞的信息.
       *
       * @author lind
       * @date 2023/1/29 11:44
       * @since 1.0.0
       */
      @Configuration
      public class FeignTraceIdInterceptor implements RequestInterceptor {
      
      	@Override
      	public void apply(RequestTemplate template) {
      
      		if (NextHttpHeader.get() != null) {
      			NextHttpHeader.get().forEach(o -> {
      				template.header(o, NextHttpHeader.get(o));
      			});
      		}
      	}
      
      }
      

      spring中的口子太多,太靈活,需要不斷的去找那個最優雅,最正確的方法

      posted @ 2023-02-24 11:01  張占嶺  閱讀(205)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 亚洲更新最快无码视频| 亚洲av成人午夜福利| 国产AV福利第一精品| 国产AV大陆精品一区二区三区| 无码国产偷倩在线播放| 国产在线精品一区二区夜色| 久久久久久伊人高潮影院| 久久国产精品日本波多野结衣 | 久久无码中文字幕免费影院蜜桃| 日本狂喷奶水在线播放212| 久久经精品久久精品免费观看| 无码福利写真片视频在线播放| 97精品国产91久久久久久久| 日韩精品一区二区三区日韩| 国产精品自拍一二三四区| 日韩女同一区二区三区久久| 丁香五月激情图片| 国产精品视频一区不卡| 亚洲欧美日本久久网站| 国产特级毛片AAAAAA视频| 性一交一乱一伦| 国产又黄又爽又不遮挡视频| 精品国精品自拍自在线| 久久亚洲精品情侣| 亚洲a免费| 中文字幕有码免费视频| 四虎在线播放亚洲成人| 欧美人与动牲猛交A欧美精品 | 国产精品亚洲五月天高清| 国产精品无码专区| 色爱综合激情五月激情| 国产精品视频一区二区噜| 香蕉乱码成人久久天堂爱| 精品三级在线| 国内精品人妻一区二区三区 | 羞羞影院午夜男女爽爽免费视频| 亚洲人妻一区二区精品| 国产极品尤物免费在线| 免费观看欧美猛交视频黑人| 久久精品国产99麻豆蜜月| 久久人人97超碰国产精品|