我有一个Spring Cloud应用程序(Eureka,Ribbon,Zuul(,它可以在Spring Tools Suite中完美运行。 当我部署到 Pivotal Web 服务时,服务会向 Eureka 注册(即,它们显示在 Eureka 控制台中(,但是当我尝试让一个服务调用另一个服务时,我收到连接被拒绝。 当我尝试通过 Zuul 时,我收到转发错误,然后是连接被拒绝。
我已经尝试了以下各种组合,但似乎没有任何帮助。
eureka:
client:
serviceUrl:
defaultZone: http://myeurekaserver.cfapps.io/eureka/
instance:
preferIpAddress: true
# hostname: ${CF_INSTANCE_IP:localhost}
# nonSecurePort: ${CF_INSTANCE_PORT:${PORT:${server.port:8002}}}
hostname: ${vcap.application.uris[0]}
nonSecurePort: 80
对于服务到服务调用,我使用自动连线的 RestTemplate。在我的代码的另一部分,我使用非自动连线的 RestTemplate。当我将其与discoveryClient.getInstances(...(一起使用时我确实取回了服务的 IP 地址和端口。 如果我尝试直接调用这些 IP 地址/端口,我也会收到连接被拒绝。
有什么想法吗?
找到了我自己的答案 - 在 PWS 中,必须启用 CF 网络。 然后需要应用规则,让服务直接相互通信。
https://docs.cloudfoundry.org/adminguide/container-networking.html
尝试以下建议:
-
重新启动运行 Zuul 的实例,看看是否可以解决问题
-
尝试监视/metrics 中的 counter.servo.discoveryclient* 值