Fegin整合Hystrix實現宣告式服務呼叫及服務熔斷降級
阿新 • • 發佈:2018-12-06
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;
}
}