Spring云网关hystrix无法正常工作

时间:2018-01-04 19:49:44

标签: spring-cloud

我遇到了让hystrix与我的路线一起工作的问题。重写路径和负载平衡之类的东西正在运行,但出于某种原因,hystrix永远不会跳闸。我将我的超时设置得很低,并且延迟了下游服务。为了让hystrix工作,你需要做些什么特别的事吗?

我正在使用带有eureka和spring-cloud-config的spring-cloud-gateway。此外,还有一种方法可以在路由不工作时进行调试吗?就像日志设置一样,看看发生了什么?

这是我的路线:

spring:
  cloud:
    gateway:
      routes:
      # =====================================
      - id: main-service
        uri: lbl://main-service
        predicates:
        - Path=/main-service**
        filters:
        - Hystrix=mainservice

这是我的pom

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.0.M7</version>
    <relativePath/> <!-- lookup parent from repository -->
</parent>
<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <project.reporting.outputEncoding>UTF-
        8</project.reporting.outputEncoding>
    <java.version>1.8</java.version>
    <spring-cloud.version>Finchley.M5</spring-cloud.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-gateway</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-config</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-eureka</artifactId>
        <version>1.4.0.RELEASE</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-hystrix</artifactId>
        <version>2.0.0.M2</version>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>
</dependencies>
<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-dependencies</artifactId>
            <version>${spring-cloud.version}</version>
            <type>pom</type>
            <scope>import</scope>
        </dependency>
    </dependencies>
</dependencyManagement>

这是我的Application类:

@EnableDiscoveryClient
@EnableHystrix
@SpringBootApplication
public class GatewayApplication {

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

jar中唯一的另一个类是:

@Configuration
public class GatewayConfiguration {

@Bean
public DiscoveryClientRouteDefinitionLocator 
      discoveryClientRouteLocator(DiscoveryClient discoveryClient) {

    return new DiscoveryClientRouteDefinitionLocator(discoveryClient);
    }

}

2 个答案:

答案 0 :(得分:0)

我想出了这个问题。似乎如果添加eureka发现,它会自动添加与您的eureka服务器返回的所有spring.application.names匹配的路由,这些路由与我使用应用程序名称作为谓词定义的路径具有相同的顺序。我能够通过将我的路线的顺序设置为-1来解决这个问题。

不确定是否有更好的方法可以做到这一点,但至少我知道hystrix正在运作。

由于

答案 1 :(得分:0)

也许您应该使用此依赖项:

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