1. 程式人生 > >斷路器(Hystrix)

斷路器(Hystrix)

斷路器用於服務之間互相呼叫,當對方服務出現故障,直接呼叫定義的熔斷方法返回,而不是等待請求超時。

斷路器所需依賴

		<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資料 這裡寫圖片描述