1

我在使用 Zuul 和 Consul 服务发现设置 Spring Cloud 应用程序时遇到问题。我在本地安装并运行了 Consul 服务器代理:

./src/main/bash/local_run_consul.sh

当我使用注释运行 Spring Boot 应用程序时,@EnableZuulProxy出现以下错误:

Caused by: org.springframework.beans.BeanInstantiationException: Failed to instantiate [org.springframework.cloud.netflix.zuul.filters.RouteLocator]: Factory method 'routeLocator' threw exception; nested exception is java.lang.IllegalStateException: Unable to locate service in consul agent: edge-server-8765
    at org.springframework.beans.factory.support.SimpleInstantiationStrategy.instantiate(SimpleInstantiationStrategy.java:189)
    at org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:588)
    ... 73 more

资料来源:

构建.gradle

buildscript {
    ext {
        springBootVersion = '1.2.7.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}")
    }
}

apply plugin: 'war'
apply plugin: 'spring-boot'

war {
    baseName = 'edge-server'
    version = '0.0.1-SNAPSHOT'
}

mainClassName = 'com.akamai.pulsar.onboarding.edge.app.ZuulApplication'

dependencies {
    providedRuntime("org.springframework.boot:spring-boot-starter-tomcat")

    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: 'spring-boot-starter-tomcat'
    }
    compile("org.springframework.boot:spring-boot-starter-undertow")
    compile("org.springframework.boot:spring-boot-starter-actuator")
    compile('org.springframework.cloud:spring-cloud-starter-zuul:1.0.0.RELEASE')
    compile('org.springframework.cloud:spring-cloud-starter-consul-all:1.0.0.M3')

    testCompile('org.springframework.boot:spring-boot-starter-test')
}

应用程序.yml

info:
  component: Zuul Server

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

zuul:
  ignoredServices: "*"
  routes:
    test-api:
      path: /test-api/**

server:
  port: 8765

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

引导程序.yml

spring:
  application:
    name: edge-server
  cloud:
    consul:
      host: localhost
      port: 8500
      config:
        enabled: true

ZuulApplication.java

@SpringBootApplication
@EnableDiscoveryClient
@EnableZuulProxy
public class ZuulApplication {

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

注意:当我注释掉@EnableZuulProxy注释时,我的服务运行没有问题,并且在 Consul 中正确注册。

我不知道该怎么做。也许有一些不好的依赖问题?

提前致谢。

4

1 回答 1

4

spring-cloud-consul 中有一个错误ConsulDiscoveryClient.getLocalServiceInstance

设置zuul.ignoreLocalService: false将暂时解决它。

于 2015-11-18T20:28:32.170 回答