最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

 更新時間:2020年01月15日 14:28:24   作者:1994的地鐵  
這篇文章主要介紹了SpringCloud斷路器Hystrix原理及用法解析,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下

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

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

兩個比較重要的類

  • 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 cause

java.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.

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

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

請求合并

/**
   * 建議: 服務提供方有較高的延遲??梢钥紤]使用請求合并
   * HystrixCollapser 合并請求的時候會創(chuàng)建一個請求處理器。如果每次合并的請求量不大,只有很少的請求還要合并,會造成合并時間窗
   * 并發(fā)量增大,時間窗的創(chuàng)建和消耗增大。所以只有在時間窗內有很大的并發(fā)量,推薦請求合并。
   *
   * batchMethod 請求合并后的替換方法com.gitee.munan56.cloud.hystrixconsumer.AService#findALl(java.util.List) 注意客戶端要有這個方法
   *HystrixProperty 一個屬性合并時間窗100s 這個時間結束后會發(fā)起請求,也就是指這個時間是合并處理的時間
   * @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();
  }

全部代碼

package com.gitee.munan56.cloud.hystrixconsumer;

import com.netflix.hystrix.contrib.javanica.annotation.HystrixCollapser;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty;
import com.netflix.hystrix.contrib.javanica.cache.annotation.CacheResult;
import com.netflix.hystrix.strategy.concurrency.HystrixRequestContext;
import com.netflix.ribbon.proxy.annotation.Hystrix;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.web.client.RestTemplate;

import java.util.List;

/**
 * @author munan
 * @version 1.0
 * @date 2020/1/13 10:41
 */
@Service
public class AService {

  @Autowired
  private RestTemplate restTemplate;

  public String doAService(){
    return "A Service is run";
  }

//  @Hystrix(fallbackHandler = )
  @HystrixCommand(fallbackMethod = "error")
  public String doBServiceOne(){
    System.out.println("begin do provider service");
    return restTemplate.getForEntity("http://service-provider:8081/api/v1/provider/do",String.class).getBody();
  }

  /**
   * CacheResult 請求緩存(針對request的緩存),官方建議在serverlet filter 中初始化HystrixRequestContext
   * 在同一用戶請求的上下文中緩存在統(tǒng)一請求的上下文環(huán)境中有效。
   * @param id
   * @return
   */
  @CacheResult(cacheKeyMethod = "getKey")
  @HystrixCommand(fallbackMethod = "error")
  public String doBServiceTwo(String id){

    System.out.println("begin do provider service");
    return restTemplate.getForEntity("http://service-provider:8081/api/v1/provider/do",String.class).getBody();
  }

  /**
   * 建議: 服務提供方有較高的延遲??梢钥紤]使用請求合并
   * HystrixCollapser 合并請求的時候會創(chuàng)建一個請求處理器。如果每次合并的請求量不大,只有很少的請求還要合并,會造成合并時間窗
   * 并發(fā)量增大,時間窗的創(chuàng)建和消耗增大。所以只有在時間窗內有很大的并發(fā)量,推薦請求合并。
   *
   * batchMethod 請求合并后的替換方法com.gitee.munan56.cloud.hystrixconsumer.AService#findALl(java.util.List) 注意客戶端要有這個方法
   *HystrixProperty 一個屬性合并時間窗100s 這個時間結束后會發(fā)起請求,也就是指這個時間是合并處理的時間
   * @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();
  }

  @HystrixCommand()
  public String findALl(List<String> ids){
    System.out.println("begin do provider service");
    return restTemplate.getForEntity("http://service-provider:8081/api/v1/provider/do",String.class).getBody();
  }

  /**
   * 服務降級
   * 指定調用服務出錯的回調方法
   * @return
   */
  public String error(Throwable e){
    return "do provider error this is default result" + "the error is " + e.getMessage();
  }
  /**
   *  服務降級
   * 指定調用服務出錯的回調方法
   * @return
   */
  public String error(String id ,Throwable e){
    return "do provider error this is default result" + "the error is " + e.getMessage();
  }


  public String getKey(String id){
    return id;
  }
}

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持腳本之家。

相關文章

  • Java來實現(xiàn)文本轉圖片需求示例

    Java來實現(xiàn)文本轉圖片需求示例

    本文主要介紹了Java來實現(xiàn)文本轉圖片需求示例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2025-04-04
  • SpringBoot注解梳理(小結)

    SpringBoot注解梳理(小結)

    這篇文章主要介紹了SpringBoot注解梳理(小結),文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2019-10-10
  • Java中啟動jar包命令舉例詳解

    Java中啟動jar包命令舉例詳解

    這篇文章主要介紹了Java中啟動jar包命令的相關資料,文中介紹了在Windows和Linux環(huán)境下啟動和運行Java程序的方法,包括使用`java?-jar`和`javaw`命令啟動,以及如何在后臺運行程序、重定向輸出和錯誤信息、以及如何停止程序,需要的朋友可以參考下
    2024-12-12
  • Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署

    Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署

    今天小編就為大家分享一篇關于Idea配置maven-tomcat-plugin插件實現(xiàn)項目部署,小編覺得內容挺不錯的,現(xiàn)在分享給大家,具有很好的參考價值,需要的朋友一起跟隨小編來看看吧
    2019-02-02
  • Spring Boot集成MyBatis-Plus 自定義攔截器實現(xiàn)動態(tài)表名切換功能

    Spring Boot集成MyBatis-Plus 自定義攔截器實現(xiàn)動態(tài)表名切換功能

    本文介紹了如何在SpringBoot項目中集成MyBatis-Plus,并通過自定義攔截器實現(xiàn)動態(tài)表名切換,此外,還探討了MyBatis攔截器在其他場景中的應用,如SQL日志記錄、多租戶數(shù)據隔離、數(shù)據權限控制等,感興趣的朋友跟隨小編一起看看吧
    2024-11-11
  • Java成員變量默認值原理詳解

    Java成員變量默認值原理詳解

    這篇文章主要介紹了Java成員變量默認值原理詳解,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • IntelliJ IDEA Java項目手動添加依賴 jar 包的方法(圖解)

    IntelliJ IDEA Java項目手動添加依賴 jar 包的方法(圖解)

    這篇文章主要介紹了IntelliJ IDEA Java項目手動添加依賴 jar 包,本文通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2020-04-04
  • Java集合ConcurrentHashMap詳解

    Java集合ConcurrentHashMap詳解

    ConcurrentHashMap?是?J.U.C?包里面提供的一個線程安全并且高效的?HashMap,所以ConcurrentHashMap?在并發(fā)編程的場景中使用的頻率比較高
    2023-01-01
  • mvn中dependencyManagement的使用詳解

    mvn中dependencyManagement的使用詳解

    這篇文章主要介紹了mvn中dependencyManagement的使用,子項目中只是聲明使用此依賴即可,可不用指定版本(將使用父pom同一指定的版本),若指定了版本,將以子項目的版本號為主,需要的朋友可以參考下
    2022-08-08
  • 基于java編寫局域網多人聊天室

    基于java編寫局域網多人聊天室

    這篇文章主要為大家詳細介紹了基于java編寫局域網多人聊天室的相關資料,使用socket基于java編寫一個局域網聊天室,具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2016-09-09

最新評論

渝北区| 隆安县| 新竹市| 汶上县| 岗巴县| 石棉县| 平湖市| 石景山区| 霍邱县| 泗水县| 平潭县| 中超| 朝阳县| 甘德县| 瑞昌市| 武平县| 日土县| 个旧市| 左贡县| 涪陵区| 合阳县| 邳州市| 拜城县| 海晏县| 五峰| 辰溪县| 墨竹工卡县| 吉安县| 平定县| 白银市| 任丘市| 景德镇市| 东乌珠穆沁旗| 吐鲁番市| 峨眉山市| 玉门市| 同德县| 同仁县| 连平县| 厦门市| 余姚市|