Zuul and Consul integration issue

匿名 (未验证) 提交于 2019-12-03 08:28:06

问题:

I have problem setting up Spring Cloud application with Zuul and Consul service discovery. I have Consul server agent installed and running locally:

./src/main/bash/local_run_consul.sh 

When I run Spring Boot application with @EnableZuulProxy annotation I get the following error:

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 

Sources:

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);     } } 

Note: When I comment out the @EnableZuulProxy annotation, my service runs without problems and is registered in Consul correctly.

I have no idea what to do. Maybe there is some bad dependency issue?

Thanks in advance.

回答1:

There is a bug in spring-cloud-consul with ConsulDiscoveryClient.getLocalServiceInstance.

Setting zuul.ignoreLocalService: false will work around it for now.



标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!