Spring Cloud(随笔) - Hystrix

Spring Cloud - Hystrix

  • 断路器,线程隔离,服务降级,服务熔断

启用

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


@SpringBootApplication
@EnableEurekaClient
@EnableCircuitBreaker
public class ServiceApplication 

fallback + Cache

@CacheResult()
    @HystrixCommand(commandKey="getUser", groupKey="userGroup",fallbackMethod = "getUserFallback")
    public User getUser(@CacheKey Long id){
        return restTemplate.getForObject("http://SPCD-USER/user/{1}",User.class,id);
    }

    public User getUserFallback(Long id){
        return new User(-1,"-1","-1","-1");
    }

    @CacheRemove(commandKey="getUser")
    @HystrixCommand()
    public void updateUser(@CacheKey Long id){
        logger.info("in UserService method updateUser id: {}",id);
    }

@GetMapping("/user/{id}")
    public User getUser(@PathVariable("id") Long id){
        userService.getUser(id); // 只请求一次
        userService.getUser(id);
        userService.getUser(id);
        userService.getUser(id);
        return userService.getUser(id);
        
        //return userClient.getUser(id);
    }

Hystrix 缓存 : 生命周期为 一个 request , 且 Hystrix 超时时间 需设置大于 Ribbon 超时时间

Feign + fallback

配置文件启用 hystrix

feign:
  hystrix:
    enabled: true
  client:
    config:
      default:
        connectTimeout: 500
        readTimeout: 10000

添加 fallback

@FeignClient(name="spcd-user",fallback = UserClientFallBack.class)
public interface UserClient {

    @GetMapping("/getDate")
    String getDate(@RequestParam("name") String name);

    @GetMapping("/user/{id}")
    User getUser(@PathVariable("id") Long id);
}


@Component
public class UserClientFallBack implements UserClient {

    @Override
    public String getDate(String name) {
        return "SPCD-USER get date fail";
    }

    @Override
    public User getUser(Long id) {
        return new User(-1,"-1","-1","-1");
    }
} 
发布了73 篇原创文章 · 获赞 78 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/SHIYUN123zw/article/details/103548225