1. 程式人生 > >Fegin整合Hystrix實現宣告式服務呼叫及服務熔斷降級

Fegin整合Hystrix實現宣告式服務呼叫及服務熔斷降級

1:fegin集成了Hystrix。所以只需要引入feigin的依賴:

<dependency>
			<groupId>org.springframework.cloud</groupId>
			<artifactId>spring-cloud-starter-feign</artifactId>
		</dependency>

2:啟動類添加註解開啟fegin宣告式客戶端呼叫和Hystrix的熔斷降級啟用策略

package com.itmuch.cloud.microserviceconsumermoviefeign;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.boot.web.servlet.ServletComponentScan;
import org.springframework.cloud.client.circuitbreaker.EnableCircuitBreaker;
import org.springframework.cloud.client.discovery.EnableDiscoveryClient;
import org.springframework.cloud.netflix.feign.EnableFeignClients;
import org.springframework.cloud.netflix.hystrix.dashboard.EnableHystrixDashboard;

@SpringBootApplication
@EnableDiscoveryClient
@EnableFeignClients
@EnableCircuitBreaker
@ServletComponentScan
@EnableHystrixDashboard
public class MicroserviceConsumerMovieFeignApplication {

	public static void main(String[] args) {
		SpringApplication.run(MicroserviceConsumerMovieFeignApplication.class, args);
	}
}

3:fegin整合Hystrix。但是需要配置Hystrix可用,已經熔斷超時時長。

#開啟feign對hystrix的支援
feign:
  hystrix:
    enabled: true
#修改feign客戶端的超時時間 500ms
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 5000

4:編寫宣告式服務呼叫feiginClient程式碼:value = "microservice-provider-user",path = "/userController"指定呼叫的服務已經服務的請求路徑

package com.itmuch.cloud.microserviceconsumermoviefeign.FeginClient;


import com.itmuch.cloud.microserviceconsumermoviefeign.entity.User;
import org.springframework.cloud.netflix.feign.FeignClient;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestParam;

/**
 * : 描述資訊
 *
 * @author liyy
 * @date 2018-07-28 14:59
 */
@FeignClient(value = "microservice-provider-user",path = "/userController",fallback = UserFeignFallBack.class)
public interface UserFeignClient{

    @GetMapping(value = "/{id}")
    public User findOne(@RequestParam("id") Long id);

}


回撥類:

package com.itmuch.cloud.microserviceconsumermoviefeign.FeginClient;

import com.itmuch.cloud.microserviceconsumermoviefeign.controller.FeignController;
import com.itmuch.cloud.microserviceconsumermoviefeign.entity.User;
import com.netflix.hystrix.contrib.javanica.annotation.HystrixCommand;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.stereotype.Component;

/**
 * : 描述資訊
 *
 * @author liyy
 * @date 2018-07-31 11:21
 */
@Component
public class UserFeignFallBack implements UserFeignClient{
    public static Logger logger = LoggerFactory.getLogger(UserFeignFallBack.class);

    @HystrixCommand
    public User findOne(Long id) {
        logger.info("斷路器開啟,執行回撥");
        User user = new User();
        user.setId(id);
        user.setAge("-1");
        user.setUsername("zs");
        return user;
    }
}