2015-11-18 8 views
1

У меня проблема с настройкой приложения Spring Cloud с обнаружением службы Zuul и Consul. У меня установлен агент сервера Консул и работает локально:Задача интеграции Zuul и Consul

./src/main/bash/local_run_consul.sh 

При запуске приложения Spring загрузки с @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 

Источники:

build.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') 
} 

application.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 

bootstrap.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 Anno я работаю без проблем и правильно зарегистрирован в консуле.

Я понятия не имею, что делать. Может быть, есть проблема с плохой зависимостью?

Заранее спасибо.

+0

spring-cloud-consul создан для весенней загрузки 1.3.x, это может быть проблемой. Я дам ему вихрь. – spencergibb

+0

версия spring-cloud-zuul, с которой она будет работать, равна 1.1.0.M4 – spencergibb

ответ

4

В весенне-облачном консуле есть bug с ConsulDiscoveryClient.getLocalServiceInstance.

Установка zuul.ignoreLocalService: false будет работать вокруг этого пока.

+0

Теперь это исправлено в моментальных снимках. – spencergibb

+0

Большое спасибо @spencergibb Ваше решение верное. –

Смежные вопросы