在上一篇博客搭建的項目基礎上:https://blog.csdn.net/qq_41890624/article/details/103663817
首先在parent的pom.xml 中添加Hystrix相關依賴
<!-- hystrix斷路器 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
</dependency>
在order-service-impl 項目的配置文件中添加開啓Hystrix
feign:
hystrix:
enabled: true
在項目的OrderServiceImpl類中添加三個方法測試
package com.vhukze.order;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import com.vhukze.api.entity.UserEntity;
@RestController
public class OrderServiceImpl implements IOrderService{
@Autowired
private MemberServiceFeign feign;
@RequestMapping("toMember")
public String toMember(String name) {
// TODO Auto-generated method stub
System.out.println("當前線程名稱:"+Thread.currentThread().getName());
UserEntity user = feign.getMember(name);
return user.toString();
}
@RequestMapping("toMemberHystrix")
@HystrixCommand(fallbackMethod="fallbackMethod")
//此註解默認開啓服務熔斷、服務降級(指定降級使用的方法名稱)、線程池隔離
public String toMemberHystrix(String name) {
// TODO Auto-generated method stub
System.out.println("當前線程名稱:"+Thread.currentThread().getName());
UserEntity user = feign.getMember(name);
return user.toString();
}
public String fallbackMethod(String data) {
return "服務降級,稍後重試";
}
}
fallbackMethod指定的方法需要帶一個參數,不然會報錯fallback method wasn't found: fallbackMethod([class java.lang.String])
現在訪問http://localhost:8020/toMemberHystrix?name=22會出現服務降級的提示,因爲getMember 方法中設置了線程等待1.5秒。Hystrix超時時間沒有設置。
設置Hystrix的超時時間
#### hystrix禁止服務超時時間
hystrix:
command:
default:
execution:
timeout:
enabled: false
此時可以正常訪問。
然後我們使用壓力測試工具Jmeter設置200個線程循環訪問訪問http://localhost:8020/toMemberHystrix?name=22
再使用瀏覽器訪問該接口,便會出現服務降級,稍後重試的字樣。
但是訪問http://localhost:8020/toMember?name=22還是可以正常訪問,說明開啓了線程池隔離機制。