斷路器(Hystrix)
阿新 • • 發佈:2018-12-11
斷路器用於服務之間互相呼叫,當對方服務出現故障,直接呼叫定義的熔斷方法返回,而不是等待請求超時。
斷路器所需依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix</artifactId>
</dependency>
啟動類中加**@EnableHystrix**註解
@HystrixCommand(fallbackMethod="callBack") public String call() { return this.restTemplate.getForObject("http://service-user/api/user/home", String.class); } public String callBack() { return "服務請求超時"; }
使用restTemplate呼叫的業務層方法前加*@HystrixCommand*對該方法建立熔斷器的功能。 如果找不到@HystrixCommand註解,補充依賴
<dependency>
<groupId>com.netflix.hystrix</groupId>
<artifactId>hystrix-javanica</artifactId>
<version>RELEASE</version>
</dependency>
這裡斷路器的作用比如service-order的call方法去呼叫service-user中/api/user/home對應的介面正常返回結果,如果模擬故障關閉service-user服務,則馬上返回callBack執行的結果而不會等待響應超時。
feign請求加熔斷器
寫個元件實現feign請求介面
@Component
public class UserHystrix implements UserFeign {
@Override
public String home() {
return "service-order 通過feign 請求超時";
}
}
通過@FeignClient的fallback定義斷路器處理邏輯
@FeignClient(value="service-user",fallback=UserHystrix.class) public interface UserFeign { @RequestMapping(value="/api/user/home") String home(); }
斷路器儀表盤
使用儀表盤引入依賴
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-hystrix-dashboard</artifactId>
</dependency>
啟動類新增**@EnableHystrixDashboard**註解 引入儀表盤的是8763埠開啟的訂單服務,通過http://localhost:8763/hystrix訪問 填寫地址 http://localhost:8763/hystrix.stream 點選Monitor Stream
聚合監控(Turbine)
建立turbine工程服務,引入依賴
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-actuator</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
配置資訊application.yml
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8761/eureka/
server:
port: 8769
spring:
application:
name: service-turbine
security:
basic:
enabled: false
turbine:
aggregator:
clusterConfig: default
appConfig: service-order,service-user
clusterNameExpression: new String("default")
啟動類
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.builder.SpringApplicationBuilder;
import org.springframework.cloud.netflix.turbine.EnableTurbine;
@SpringBootApplication
@EnableTurbine
public class TurbineApplication {
public static void main(String[] args) {
new SpringApplicationBuilder(TurbineApplication.class).web(true).run(args);
}
}
在訂單服務和使用者服務都新增斷路器配置,互調。
通過http://localhost:8763/hystrix訪問,輸入監控流http://localhost:8769/turbine.stream,點monitor stream,可以看到聚合了訂單服務和使用者服務的hystrix資料