Hystrix參數配置


1、Hystrix參數配置文檔 

2、Hystrix參數配置示例

import org.springframework.beans.factory.annotation.Autowired; import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.RestController; import com.mimaxueyuan.consumer.turbine.service.MyService; import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand; import com.netflix.hystrix.contrib.javanica.annotation.HystrixProperty; import com.netflix.hystrix.contrib.javanica.conf.HystrixPropertiesManager; @RestController public class HystrixController { @Autowired private MyService myService; /** * @HystrixCommand由名為“javanica”的Netflix contrib庫提供 。 * Spring Cloud在連接到Hystrix斷路器的代理中使用該注解自動包裝Spring bean。 * 斷路器計算何時打開和關閉電路,以及在發生故障時應該做什么。 * * @author Kevin * @Title: get * @param id * @return * @return: String */ @GetMapping("/get1/{id}") @HystrixCommand(fallbackMethod = "getError") public String get1(@PathVariable String id) { try { System.out.println(Thread.currentThread().getName()+":get1 before sleep 5s...."); Thread.sleep(1000 * 5); System.out.println(Thread.currentThread().getName()+":get1 after sleep 5s...."); } catch (InterruptedException e) { e.printStackTrace(); } return "kevin.get1." + id; } /** * 配置Hystrix隔離策略,默認為THREAD,隔離策略分為THREAD、SEMAPHORE兩種 * * execution.isolation.strategy 默認為THREAD * * @param id * @return * @author lynch */ @GetMapping("/get2/{id}") @HystrixCommand(fallbackMethod = "getError", commandProperties = { // @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value="THREAD")
            @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE") }) public String get2(@PathVariable String id) { try { System.out.println(Thread.currentThread().getName()+":get2 before sleep 5s...."); Thread.sleep(1000 * 5); System.out.println(Thread.currentThread().getName()+":get2 after sleep 5s...."); } catch (InterruptedException e) { e.printStackTrace(); } return "kevin.get2." + id; } /** * 設置HystrixCommand的執行是否在超時發生時被中斷。使用線程隔離時,是否對命令執行超時的線程調用中斷(Thread.interrupt())操作 * * execution.isolation.thread.interruptOnTimeout 參數,默認為true * * @param id * @return * @author lynch */ @GetMapping("/get3/{id}") @HystrixCommand(fallbackMethod = "getError",commandProperties= { //設置超時的時候不中斷線程,默認為true
            @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_INTERRUPT_ON_TIMEOUT,value="false") }) public String get3(@PathVariable String id) { try { System.out.println(Thread.currentThread().getName()+":get3 before sleep 5s...."); Thread.sleep(1000 * 5); System.out.println(Thread.currentThread().getName()+":get3 after sleep 5s...."); } catch (InterruptedException e) { e.printStackTrace(); } return "kevin.get3." + id; } /** * 設置調用線程產生的HystrixCommand.getFallback()方法的允許最大請求數目。 如果達到最大並發數目,后續請求將會被拒絕,如果沒有實現回退,則拋出異常。 * (這里需要注意一點,這個變量的命名不是很規范,它實際上對THREAD和SEMAPHORE兩種隔離策略都生效) * * fallback.isolation.semaphore.maxConcurrentRequests默認為10 * * @param id * @return * @author lynch */ @GetMapping("/get4/{id}") @HystrixCommand(fallbackMethod = "getError",commandProperties= { @HystrixProperty(name = HystrixPropertiesManager.EXECUTION_ISOLATION_STRATEGY, value = "SEMAPHORE"), @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_SEMAPHORE_MAX_CONCURRENT_REQUESTS,value="1") }) public String get4(@PathVariable String id) { try { System.out.println(Thread.currentThread().getName()+":get4 before sleep 5s...."); Thread.sleep(1000 * 5); System.out.println(Thread.currentThread().getName()+":get4 after sleep 5s...."); } catch (InterruptedException e) { e.printStackTrace(); } return "kevin.get4." + id; } /** * 設置HystrixCommand的執行是否有超時限制。 * * execution.timeout.enabled 默認為true, 是否超時 * * @param id * @return
     */ @GetMapping("/get5/{id}") @HystrixCommand(fallbackMethod = "getError",commandProperties= { @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_TIMEOUT_ENABLED,value="false") }) public String get5(@PathVariable String id) { try { System.out.println(Thread.currentThread().getName()+":get5 before sleep 5s...."); Thread.sleep(1000 * 5); System.out.println(Thread.currentThread().getName()+":get5 after sleep 5s...."); } catch (InterruptedException e) { e.printStackTrace(); } return "kevin.get5." + id; } /** * 設置調用者等待命令執行的超時限制,超過此時間,HystrixCommand被標記為TIMEOUT,並執行回退邏輯。 * 注意:超時會作用在HystrixCommand.queue(),即使調用者沒有調用get()去獲得Future對象。 * * execution.isolation.thread.timeoutInMilliseconds 默認為1000 * * @param id * @return * @author lynch */ @GetMapping("/get6/{id}") @HystrixCommand(fallbackMethod = "getError",commandProperties= { @HystrixProperty(name=HystrixPropertiesManager.EXECUTION_ISOLATION_THREAD_TIMEOUT_IN_MILLISECONDS,value="6000") }) public String get6(@PathVariable String id) { try { System.out.println(Thread.currentThread().getName()+":get6 before sleep 5s...."); Thread.sleep(1000 * 5); System.out.println(Thread.currentThread().getName()+":get6 after sleep 5s...."); } catch (InterruptedException e) { e.printStackTrace(); } return "kevin.get6." + id; } public String getError(String id) { System.out.println(Thread.currentThread().getName()+":getError before ...."); myService.execute(); System.out.println(Thread.currentThread().getName()+":getError after ...."); return "超時錯誤,使用斷路器返回" + id; } }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM