SpringCloud微服务 之hystrix(三)

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/u012437781/article/details/83691907

前言

本小节我们学习一下如何是Feign拥有Hystrix的熔断功能。

案例

  • Eureka Server端编写(参考前例)。
    在这里插入图片描述

  • Eureka Client端服务提供方编写。

    • 项目结构
      在这里插入图片描述

    • CoreCode

      <?xml version="1.0" encoding="UTF-8"?>
      <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      	<modelVersion>4.0.0</modelVersion>
      
      	<artifactId>microservice-deal-broker-cloud-hystrix-with-feign</artifactId>
      	<packaging>jar</packaging>
      
      	<name>microservice-deal-broker-cloud-hystrix-with-feign</name>
      	<description>Demo project for Spring Boot</description>
      
      	<parent>
      		<groupId>com.example</groupId>
      		<artifactId>microservice-deal-parent</artifactId>
      		<version>0.0.1-SNAPSHOT</version>
      	</parent>
      
      	<dependencies>
      		<!-- Eureka -->
      		<dependency>
      			<groupId>org.springframework.cloud</groupId>
      			<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
      		</dependency>
      	
      		<!-- Feignf -->
      		<dependency>
      			<groupId>org.springframework.cloud</groupId>
      			<artifactId>spring-cloud-starter-openfeign</artifactId>
      		</dependency>
      		<!-- springCloud Hystrix依赖 -->
      		<dependency>
      			<groupId>org.springframework.cloud</groupId>
      			<artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      		</dependency>
      
      	</dependencies>
      
      </project>
      
      
      @SpringBootApplication
      @EnableDiscoveryClient
      @EnableFeignClients //开启FeignClient注解
      @EnableCircuitBreaker //开启Hystrix熔断机制
      public class MicroserviceDealBrokerHystrixWithFeignApplication {
      
      	public static void main(String[] args) {
      		SpringApplication.run(MicroserviceDealBrokerHystrixWithFeignApplication.class,
      				args);
      	}
      }
      
      
      @FeignClient(name = "microservice-deal-cloud",fallback = HystrixFallBackMethod.class)
      public interface FeignConfig {
      
      	//第一个坑:使用Feign的时候,如果参数中带有@PathVariable形式的参数,则要用value=""标明对应的参数,否则会抛出IllegalStateException异常
      	@GetMapping("/deal/{id}")
      	public Deal findById(@PathVariable(value="id") Long id);
      }
      
      @Component
      public class HystrixFallBackMethod implements FeignConfig {
      
      	@Override
      	public Deal findById(Long id) {
      		Deal deal = new Deal();
      		deal.setId(id.intValue());
      		deal.setName("Dustyone");
      		return deal;
      	}
      
      }
      
      
      @RestController
      public class BrokerController {
      	
      	@Autowired
      	private FeignConfig feignConfig;
      	
      	@GetMapping("/deal/{id}")
      	public Deal findById(@PathVariable(value="id") Long id) {
      		return this.feignConfig.findById(id);
      	}
      }
      
  • Eureka Client端服务提消费编写(单实例) (参考前例)。

  • 访问:http://localhost:8082/deal/2
    在这里插入图片描述

  • 手动shutdown 服务提供者:
    在这里插入图片描述

  • 访问:http://localhost:8082/deal/2
    在这里插入图片描述
    此时FeignClient中声明的 Hystrix熔断机制开启了。

小结

  • 在FeignClient中声明Hystrix熔断机制需要在@FeignClient中声明fallback方法,同时配置文件中声明Feign对Hystrix的支持:feign:hystrix:enabled: true。
  • 在主类中声明了@EnableFeignClients可以不需要对@EnableCircuitBreaker做声明(feign:hystrix:enabled: true一被声明)。
  • 本小节使用的案例:microservice-deal-eureka、microservice-deal-cloud、microservice-deal-broker-cloud-hystrix-with-feign

猜你喜欢

转载自blog.csdn.net/u012437781/article/details/83691907
今日推荐