国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > 幫助中心 > 正文

SpringCloud斷路器Hystrix原理及用法解析

2024-07-09 22:43:18
字體:
來源:轉載
供稿:網友

這篇文章主要介紹了SpringCloud斷路器Hystrix原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

在分布式環境中,許多服務依賴項中的一些必然會失敗。Hystrix是一個庫,通過添加延遲容忍和容錯邏輯,幫助你控制這些分布式服務之間的交互。Hystrix通過隔離服務之間的訪問點、停止級聯失敗和提供回退選項來實現這一點,所有這些都可以提高系統的整體彈性

兩個比較重要的類

HystrixCommand HystrixObservableCommand

注解@HystrixCommand(fallbackMethods="methods")methods中可以添加降級策略

除了提供服務降級

還提供了請求緩存

@CacheResult @CacheRemve

不過添加CacheResult的時候,說

HystrixRequestContext未初始化。

2020-01-13 16:12:10.273 ERROR 15348 --- [nio-8083-exec-1] o.a.c.c.C.[.[.[/].[dispatcherServlet]  : Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.reflect.UndeclaredThrowableException] with root causejava.lang.IllegalStateException: Request caching is not available. Maybe you need to initialize the HystrixRequestContext?  at com.netflix.hystrix.HystrixRequestCache.get(HystrixRequestCache.java:104) ~[hystrix-core-1.5.18.jar:1.5.18]  at com.netflix.hystrix.AbstractCommand$7.call(AbstractCommand.java:478) ~[hystrix-core-1.5.18.jar:1.5.18]  at com.netflix.hystrix.AbstractCommand$7.call(AbstractCommand.java:454) ~[hystrix-core-1.5.18.jar:1.5.18]  at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:46) ~[rxjava-1.3.8.jar:1.3.8]  at rx.internal.operators.OnSubscribeDefer.call(OnSubscribeDefer.java:35) ~[rxjava-1.3.8.jar:1.3.8]

查看官方文檔https://github.com/Netflix/Hystrix/wiki/How-To-Use

Typically this context will be initialized and shut down via a ServletFilter that wraps a user request or some other lifecycle hook.

在同一用戶請求的上下文中,相同依賴服務的返回數據始終保持一致。在當次請求內對同一個依賴進行重復調用,只會真實調用一次。在當次請求內數據可以保證一致性。

初始化是在filter中進行(官方建議),但是每一次請求都會進行初始化 。所以說和一般的緩存還是有去別的,可以解決高并發,保證的資源的線程安全。在某些場景很有用。

請求合并

/**   * 建議: 服務提供方有較高的延遲。可以考慮使用請求合并   * HystrixCollapser 合并請求的時候會創建一個請求處理器。如果每次合并的請求量不大,只有很少的請求還要合并,會造成合并時間窗   * 并發量增大,時間窗的創建和消耗增大。所以只有在時間窗內有很大的并發量,推薦請求合并。   *   * batchMethod 請求合并后的替換方法com.gitee.munan56.cloud.hystrixconsumer.AService#findALl(java.util.List) 注意客戶端要有這個方法   *HystrixProperty 一個屬性合并時間窗100s 這個時間結束后會發起請求,也就是指這個時間是合并處理的時間   * @param id   * @return   */  @HystrixCollapser(batchMethod = "findALl",collapserProperties = @HystrixProperty(name = "timerDelayInMilliseconds",value = "100"))  public String doBFindOne(String id){    System.out.println("begin do provider service");    return restTemplate.getForEntity("http://service-provider:8081/api/v1/provider/do",String.class).getBody();  }
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 西贡区| 沙湾县| 福泉市| 车致| 浪卡子县| 庄浪县| 阿图什市| 黄骅市| 罗城| 平顺县| 淮北市| 保亭| 高碑店市| 若羌县| 邹平县| 乌苏市| 安达市| 克东县| 如皋市| 泰州市| 石泉县| 休宁县| 越西县| 呼伦贝尔市| 山阴县| 库伦旗| 山阴县| 达日县| 乐清市| 台山市| 桂平市| 牙克石市| 成都市| 闵行区| 灵璧县| 金堂县| 孝义市| 梅河口市| 柳河县| 临猗县| 满洲里市|