我知道有很多人问过这个问题,但即使我尝试了我找到的所有解决方案,我仍然无法解决问题。 基本上,我有一个名为 emms-core 的微服务: 这里是 bootstrap.yml
spring:
application:
name: emms-core
cloud:
config:
fail-fast: true
password: s3cr3t
uri: http://localhost:8888
username: root
profiles:
active: dev
eureka:
client:
service-url:
default-zone: http://localhost:8761/eureka
spring cloud 依赖:
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>`
这是java代码:
@SpringBootApplication(exclude = R2dbcAutoConfiguration.class)
@EnableEurekaClient
@RestController
@RequestMapping("/")
@Log4j2
public class EmmsCore {
public static void main(String[] args) {
SpringApplication.run(EmmsCore.class, args);
log.info("[Emms] Server started at " + LocalDateTime.now());
}
@GetMapping(path = "ping")
public Mono<String> ping() {
return Mono.just("pong");
}
@Bean
@LoadBalanced
RestTemplate restTemplate() {
return new RestTemplate();
}
}
接下来,我设置了一个 eureka 服务器:
yml 配置:
eureka:
client:
fetch-registry: false
register-with-eureka: false
server:
port: 8761
spring:
application:
name: eureka-server
spring cloud 依赖:
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>${spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>${spring-cloud-version}</version>
</dependency>
java代码:
@SpringBootApplication
@EnableEurekaServer
public class ServiceRegistry {
public static void main(String[] args) {
SpringApplication.run(ServiceRegistry.class, args);
}
}
最后,我设置了一个 Zuul 代理:
配置:
server.port=8762
spring.application.name=zuul-server
eureka.client.fetch-registry=true
ribbon.eureka.enabled=true
eureka.client.service-url.default-zone=http://localhost:8761/eureka/
zuul.ignored-services=*
zuul.routes.gallery-service.path=/emms-core/**
zuul.routes.gallery-service.service-id=emms-core
zuul.routes.auth-service.sensitive-headers=Cookie,Set-Cookie
依赖:
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-webflux</artifactId>
<version>${spring-boot-starter.version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-zuul</artifactId>
<version>2.2.7.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>${spring-cloud-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-bootstrap</artifactId>
<version>${spring-cloud-version}</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>3.0.0</version>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>2020.0.0</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
java代码:
@SpringBootApplication
@EnableEurekaClient
@EnableZuulProxy
public class Proxy {
public static void main(String[] args) {
SpringApplication.run(Proxy.class, args);
}
}
当我尝试调用 localhost:8762/emms-core/api/ping
时出现异常:
2021-04-04 19:02:30.571 INFO 29424 --- [nio-8762-exec-1] c.netflix.loadbalancer.BaseLoadBalancer : Client: emms-core instantiated a LoadBalancer: DynamicServerListLoadBalancer:{NFLoadBalancer:name=emms-core,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:null
2021-04-04 19:02:30.578 INFO 29424 --- [nio-8762-exec-1] c.n.l.DynamicServerListLoadBalancer : Using serverListUpdater PollingServerListUpdater
2021-04-04 19:02:30.580 INFO 29424 --- [nio-8762-exec-1] c.n.l.DynamicServerListLoadBalancer : DynamicServerListLoadBalancer for client emms-core initialized: DynamicServerListLoadBalancer:{NFLoadBalancer:name=emms-core,current list of Servers=[],Load balancer stats=Zone stats: {},Server stats: []}ServerList:com.netflix.loadbalancer.ConfigurationBasedServerList@43fc9527
2021-04-04 19:02:30.727 WARN 29424 --- [nio-8762-exec-1] o.s.c.n.z.filters.post.SendErrorFilter : Error during filtering
com.netflix.zuul.exception.ZuulException: Forwarding error
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:65) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:893) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
...
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.44.jar:9.0.44]
at java.base/java.lang.Thread.run(Thread.java:834) ~[na:na]
Caused by: com.netflix.client.ClientException: Load balancer does not have available server for client: emms-core
at com.netflix.loadbalancer.LoadBalancerContext.getServerFromLoadBalancer(LoadBalancerContext.java:483) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:184) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]
at com.netflix.loadbalancer.reactive.LoadBalancerCommand$1.call(LoadBalancerCommand.java:180) ~[ribbon-loadbalancer-2.3.0.jar:2.3.0]
at rx.Observable.unsafeSubscribe(Observable.java:10327) ~[rxjava-1.3.8.jar:1.3.8]
正如我所说,我已经尝试了很多我找到的解决方案,但目前没有运气。你们能帮我解决这个问题吗?我用的是 spring cloud 依赖 2020.0.0