微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Dockerized 尤里卡发现服务器注册服务,但在尝试使用时它们不起作用

如何解决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 举报,一经查实,本站将立刻删除。