Fegin Hystrix не эффективен - PullRequest
       26

Fegin Hystrix не эффективен

0 голосов
/ 28 марта 2019

Я попытался Feign настроить Hystrix.Введите 127.0.0.1:8100/test в адресной строке браузера.Независимо от того, настроен ли он с помощью fallback или fallbackFactory, результат запроса: «com.netflix.client.ClientException: у балансировщика нагрузки нет доступного сервера для клиента: microservice-provider-user», это объясняет, что откат неработает.

Контроллер


@Import(FeignClientsConfiguration.class)
@RestController
public class TestController {

    private UserFeignClient userFeignClient;

    private UserFeignClient adminFeignClient;

    @Autowired
    public TestController(Decoder decoder, Encoder encoder, Client client, Contract contract) {
        this.userFeignClient = Feign.builder().client(client).encoder(encoder)
                .decoder(decoder).contract(contract)
                .requestInterceptor(new BasicAuthRequestInterceptor("user", "user"))
                .target(UserFeignClient.class, "http://microservice-provider-user/");

        this.adminFeignClient = Feign.builder().client(client).encoder(encoder)
                .decoder(decoder).contract(contract)
                .requestInterceptor(new BasicAuthRequestInterceptor("admin", "admin"))
                .target(UserFeignClient.class, "http://microservice-provider-user/");
    }

    @GetMapping("/test")
    @ResponseBody
    public String test() {
        return userFeignClient.findById(123L);
    }

    @GetMapping("/testAdmin")
    @ResponseBody
    public String test2() {
        return adminFeignClient.findById(123L);
    }
}

Основной метод


@SpringBootApplication
@EnableFeignClients
@EnableHystrixDashboard
@EnableHystrix
@EnableCircuitBreaker
public class Demo2Application {

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

}

Откат

@Component
public class FeignClientFallback implements UserFeignClient{
    @Override
    public String findById(Long id) {
        return "hello FeignClientFallback";
    }
}

Gradle

plugins {
    id 'org.springframework.boot' version '2.1.3.RELEASE'
    id 'java'
}

apply plugin: 'io.spring.dependency-management'

group = 'com.example'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '1.8'

repositories {
    mavenCentral()
}

ext {
    set('springCloudServicesVersion', '2.1.2.RELEASE')
    set('springCloudVersion', 'Greenwich.SR1')
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-eureka-client'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-hystrix-dashboard'
    implementation 'org.springframework.cloud:spring-cloud-starter-netflix-turbine'
    implementation 'org.springframework.cloud:spring-cloud-starter-openfeign'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
}

dependencyManagement {
    imports {
        mavenBom "io.pivotal.spring.cloud:spring-cloud-services-dependencies:${springCloudServicesVersion}"
        mavenBom "org.springframework.cloud:spring-cloud-dependencies:${springCloudVersion}"
    }
}

Feignclient

@FeignClient(name = "microservice-provider-user", fallback = FeignClientFallback.class)
public interface UserFeignClient {

    @GetMapping("/test2/{id}")
    String findById(@PathVariable("id") Long id);
}

application.yml

spring:
  application:
    name: microservice-custom
eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
    healthcheck:
      enabled: true
  instance:
    prefer-ip-address: true

server:
  port: 8100

feign:
  hystrix:
    enabled: true
  client:
    config:
      default:
        connectTimeout: 1000
        readTimeout: 1000
        loggerLevel: basic

hystrix:
  command:
    default:
      execution:
        isolation:
          strategy: SEMAPHORE

logging:
  level:
    com.lv.springCloudClient1.UserFeignClient: DEBUG

management:
  endpoints:
    web:
      exposure:
        include: '*'

Теоретически, если я отключу сервер «microservice-provider-user», я получу содержимое, возвращаемое методом возврата.

1 Ответ

0 голосов
/ 28 марта 2019

@Import(FeignClientsConfiguration.class)
@RestController
public class TestController {

    @Autowired
    private UserFeignClient userFeignClient;

    @Autowired
    private UserFeignClient adminFeignClient;

    @GetMapping("/test")
    @ResponseBody
    public String test() {
        return userFeignClient.findById(123L);
    }

    @GetMapping("/testAdmin")
    @ResponseBody
    public String test2() {
        return adminFeignClient.findById(123L);
    }
}

Я изменил предыдущий код контроллера на текущий.эффективен запасной метод Hystrix.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...