Проблема с интеграцией Zuul и Consul

У меня проблема с настройкой приложения Spring Cloud с обнаружением служб Zuul и Consul. У меня установлен агент сервера 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

Источники:

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, мой сервис работает без проблем и корректно регистрируется в Consul.

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

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


person Thomas Weglinski    schedule 18.11.2015    source источник
comment
spring-cloud-consul построен для spring-boot 1.3.x, это может быть проблемой. Я попробую.   -  person spencergibb    schedule 18.11.2015
comment
версия spring-cloud-zuul, с которой он будет работать, — 1.1.0.M4.   -  person spencergibb    schedule 18.11.2015


Ответы (1)


Существует ошибка в spring-cloud-consul с ConsulDiscoveryClient.getLocalServiceInstance.

Параметр zuul.ignoreLocalService: false пока поможет обойти это.

person spencergibb    schedule 18.11.2015
comment
Теперь это исправлено в снимках. - person spencergibb; 19.11.2015
comment
Большое спасибо @spencergibb Ваше решение правильное. - person Thomas Weglinski; 19.11.2015