如何解决Dockerized 尤里卡发现服务器注册服务,但在尝试使用时它们不起作用
我已经用 netflix eureka 实现了一个发现服务,并且我已经将它docker化了。 这是尤里卡的配置。
eureka:
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://discovery:8761/eureka
server:
port: 8761
运行这个eureka服务和我项目的其他服务后,其他服务都在eureka注册。在尤里卡仪表板中,它在“当前在尤里卡注册的实例”表中显示了我的服务。
我在eureka服务器中有以下enpoint来获取服务的实例信息。但每次我都得到“没有实例”。
@RequestMapping("/clients/{applicationName}")
public @ResponseBody
String getClientsByApplicationName(@PathVariable String applicationName) {
if(this.discoveryClient.getInstances(applicationName).size()==0){
return "No instances";
}
return this.discoveryClient.getInstances(applicationName).get(0).getUri().toString();
}
这是我的 eureka 服务器的 Dockerfile。
FROM openjdk:8
ARG JAR_FILE=target/*.jar
copY ${JAR_FILE} app.jar
ENTRYPOINT ["java","-jar","/app.jar"]
这就是我运行 eureka 服务 docker 的方式。
docker run -p 8761:8761 --network=project-network --name discovery discovery-img
我有一个 zuul API 网关来访问我的服务。它也是码头化的。以下是zuul application.yml
server:
port: 8990
spring:
cloud:
discovery:
enabled: true
application:
name: zuul-gateway
eureka:
client:
register-with-eureka: false
fetch-registry: true
service-url:
defaultZone: http://discovery:8761/eureka
instance:
hostname: discovery
zuul:
host:
connect-timeout-millis: 500000
socket-timeout-millis: 500000
ignored-services: "*"
routes:
user-service:
path: /user/**
serviceId: user
stripPrefix: false
scraping-service:
path: /manager/**
serviceId: manager
stripPrefix: true
authorization-service:
path: /authorization/**
serviceId: authorization-server
stripPrefix: true
sensitive-headers: Cookie,Set-Cookie
hystrix:
command:
default:
execution:
isolation:
thread:
timeoutInMilliseconds: 30000
ribbon:
ReadTimeout: 60000
connection-timeout: 3000
eureka:
enabled: true
这是我网关的 Dockerfile。
FROM openjdk:8
ARG JAR_FILE=target/*.jar
copY ${JAR_FILE} app.jar
ENTRYPOINT ["java","/app.jar"]
这就是我运行它的方式。
docker run -p 8990:8990 --network=project-network --name=gateway gateway-img
当我向 http://localhost:8990/user 发送请求时,在网关容器内部,它尝试连接到“discovery:8080”。我不知道为什么它会尝试连接到发现:8080,因为我在发现容器中甚至没有 8080 端口。
当我直接向 localhost:8080(用户容器)发送请求时,它工作正常。
我有两个问题。
1.当我通过 API 网关发送请求时,它不起作用。
2.当我转到 localhost:8761/clients/user 时,它说没有实例。 (但它在eureka仪表板中显示USER,这意味着用户服务已成功注册。)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。