zoukankan      html  css  js  c++  java
  • springcloud10---feign-with-hystrix_factory

    package com.itmuch.cloud;
    
    import org.springframework.boot.SpringApplication;
    import org.springframework.boot.autoconfigure.SpringBootApplication;
    import org.springframework.cloud.netflix.eureka.EnableEurekaClient;
    import org.springframework.cloud.netflix.feign.EnableFeignClients;
    
    @SpringBootApplication
    @EnableEurekaClient
    @EnableFeignClients
    public class ConsumerMovieFeignApplication {
      public static void main(String[] args) {
        SpringApplication.run(ConsumerMovieFeignApplication.class, args);
      }
    }
    package com.itmuch.cloud.controller;
    
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.web.bind.annotation.GetMapping;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RestController;
    
    import com.itmuch.cloud.entity.User;
    import com.itmuch.cloud.feign.UserFeignClient;
    
    @RestController
    public class MovieController {
    
      @Autowired
      private UserFeignClient userFeignClient;
    
      @GetMapping("/movie/{id}")
      public User findById(@PathVariable Long id) {
        return this.userFeignClient.findById(id);
      }
    }
    package com.itmuch.cloud.feign;
    
    import org.slf4j.Logger;
    import org.slf4j.LoggerFactory;
    import org.springframework.stereotype.Component;
    
    import com.itmuch.cloud.entity.User;
    
    import feign.hystrix.FallbackFactory;
    
    @Component
    public class HystrixClientFactory implements FallbackFactory<UserFeignClient> {
    
      private static final Logger LOGGER = LoggerFactory.getLogger(HystrixClientFactory.class);
    
      @Override
      public UserFeignClient create(Throwable cause) {
        HystrixClientFactory.LOGGER.info("fallback; reason was: {}", cause.getMessage());
        return new UserFeignClientWithFactory() {
          @Override
          public User findById(Long id) {
            User user = new User();
            user.setId(-1L);
            return user;
          }
        };
      }
    }
    package com.itmuch.cloud.feign;
    
    import org.springframework.stereotype.Component;
    
    import com.itmuch.cloud.entity.User;
    
    @Component
    public class HystrixClientFallback implements UserFeignClient {
      @Override
      public User findById(Long id) {
        User user = new User();
        user.setId(0L);
        return user;
      }
    }
    package com.itmuch.cloud.feign;
    
    import org.springframework.cloud.netflix.feign.FeignClient;
    import org.springframework.web.bind.annotation.PathVariable;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RequestMethod;
    
    import com.itmuch.cloud.entity.User;
    
    @FeignClient(name = "microservice-provider-user", /*fallback = HystrixClientFallback.class, */fallbackFactory = HystrixClientFactory.class)
    public interface UserFeignClient {//请求microservice-provider-user的/simple/{id}方法。回调调用的是HystrixClientFactory的findById方法
      @RequestMapping(value = "/simple/{id}", method = RequestMethod.GET)
      public User findById(@PathVariable("id") Long id);
    }
    package com.itmuch.cloud.feign;
    
    public interface UserFeignClientWithFactory extends UserFeignClient {
    
    }
    spring:
      application:
        name: microservice-consumer-movie-feign-with-hystrix-hystrix-factory
    server:
      port: 7901
    eureka:
      client:
        healthcheck:
          enabled: true
        serviceUrl:
          defaultZone: http://user:password123@localhost:8761/eureka
      instance:
        prefer-ip-address: true
    <?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-consumer-movie-feign-with-hystrix-hystrix-factory</artifactId>
        <packaging>jar</packaging>
    
        <parent>
            <groupId>com.itmuch.cloud</groupId>
            <artifactId>microservice-spring-cloud</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </parent>
    
        <properties>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
            <java.version>1.8</java.version>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-eureka</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-actuator</artifactId>
            </dependency>
    
            <dependency>
                <groupId>org.springframework.cloud</groupId>
                <artifactId>spring-cloud-starter-feign</artifactId>
            </dependency>
        </dependencies>
    </project>
  • 相关阅读:
    平衡二叉树之RB树
    平衡二叉树之AVL树
    实现哈希表
    LeetCode Median of Two Sorted Arrays
    LeetCode Minimum Window Substring
    LeetCode Interleaving String
    LeetCode Regular Expression Matching
    PAT 1087 All Roads Lead to Rome
    PAT 1086 Tree Traversals Again
    LeetCode Longest Palindromic Substring
  • 原文地址:https://www.cnblogs.com/yaowen/p/9142505.html
Copyright © 2011-2022 走看看