Zuul Proxy无法路由,导致com.netflix.zuul.exception.ZuulException:转发错误

use*_*551 11 netflix-zuul

我有简单的服务:

transactions-core-service和transactions-api-service.

transactions-api-service调用transactions-core-service来返回事务列表.使用hystrix命令启用transactions-api-service.

两者都在以下服务ID的Eureka服务器中注册:

TRANSACTIONS-API-SERVICE    n/a (1) (1) UP (1) - 192.168.2.12:transactions-api-service:8083
TRANSACTIONS-CORE-SERVICE   n/a (1) (1) UP (1) - 192.168.2.12:transactions-core-service:8087
Run Code Online (Sandbox Code Playgroud)

以下是Zuul服务器:

@SpringBootApplication

@Controller

@EnableZuulProxy

public class ZuulApplication {

    public static void main(String[] args) {
        new SpringApplicationBuilder(ZuulApplication.class).web(true).run(args);
    }
}
Run Code Online (Sandbox Code Playgroud)

Zuul配置:

===============================================

info:
  component: Zuul Server

server:
  port: 8765

endpoints:
  restart:
    enabled: true
  shutdown:
    enabled: true
  health:
    sensitive: false

zuul:
  ignoredServices: "*"
  routes:
    transactions-api-service: 
    path: transactions/accounts/**
    serviceId: transactions-api-service

eureka:
  client:
    serviceUrl:
      defaultZone: http://localhost:8761/eureka/

logging:
  level:
    ROOT: INFO
    org.springframework.web: DEBUG

===============================================
Run Code Online (Sandbox Code Playgroud)

当我尝试使用url(http://localhost:8765/transactions/accounts/123/transactions/786)调用transactions-api-service时,我得到了Zuul异常:

2016-02-13 11:29:29.050 WARN 4936 --- [nio-8765-exec-1] oscnzfilters.post.SendErrorFilter:过滤时出错

com.netflix.zuul.exception.ZuulException:转发org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.forward(RibbonRoutingFilter.java:131)〜[spring-cloud-net flix-core-1.1. 0.M3.jar:1.1.0.M3]在org.springframework.cloud.netflix.zuul.filters.route.RibbonRoutingFilter.run(RibbonRoutingFilter.java:76)〜[spring-cloud-netflix-core-1.1.0 .M3.jar:1.1.0.M3] ......

如果我单独调用transactions-api-service(with localhost /accounts/123/transactions/786),它可以正常工作.

我错过了Zuul的任何配置吗?

Raf*_*ik 7

您需要通过在zuul服务器的application.yml中添加此属性来更改zuul执行超时 :

# Increase the Hystrix timeout to 60s (globally)
hystrix:
  command:
    default:
      execution:
        isolation:
          thread:
            timeoutInMilliseconds: 60000
Run Code Online (Sandbox Code Playgroud)

请参阅netflix问题上的这个主题:https://github.com/spring-cloud/spring-cloud-netflix/issues/321


jua*_*umn 5

您的缩进不正确。代替:

zuul:
  ignoredServices: "*"
  routes:
    transactions-api-service: 
    path: transactions/accounts/**
    serviceId: transactions-api-service
Run Code Online (Sandbox Code Playgroud)

它应该是:

zuul:
  ignoredServices: "*"
  routes:
    transactions-api-service: 
      path: transactions/accounts/**
      serviceId: transactions-api-service
Run Code Online (Sandbox Code Playgroud)


Man*_*sal 5

面临同样的问题。就我而言,zuul使用服务发现。作为解决方案,下面的配置就像一个魅力。

ribbon.ReadTimeout=60000
Run Code Online (Sandbox Code Playgroud)

参考属性用法在这里