Zuul 和 Consul 整合问题
Zuul and Consul integration issue
我在使用 Zuul 和 Consul 服务发现设置 Spring 云应用程序时遇到问题。我安装了 Consul 服务器代理并在本地 运行ning:
./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
注释时,我的服务 运行 没有问题并且在 Consul 中正确注册。
我不知道该怎么办。也许存在一些不良的依赖性问题?
提前致谢。
spring-cloud-consul 中有一个 bug 和 ConsulDiscoveryClient.getLocalServiceInstance
。
设置zuul.ignoreLocalService: false
暂时可以解决这个问题。
我在使用 Zuul 和 Consul 服务发现设置 Spring 云应用程序时遇到问题。我安装了 Consul 服务器代理并在本地 运行ning:
./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
注释时,我的服务 运行 没有问题并且在 Consul 中正确注册。
我不知道该怎么办。也许存在一些不良的依赖性问题?
提前致谢。
spring-cloud-consul 中有一个 bug 和 ConsulDiscoveryClient.getLocalServiceInstance
。
设置zuul.ignoreLocalService: false
暂时可以解决这个问题。