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.