当前位置: 首页 > 知识库问答 >
问题:

停靠的microservice无法注册到eureka服务器

叶建柏
2023-03-14

我使用SpringBoot、SpringCloudNetfix和docker来运行微服务。

在非停靠环境中一切正常,但一旦我停靠了eureka服务器和microservice(例如用户服务),我发现用户服务无法注册到eureka服务器。

我可以通过http://{Ubuntu server}:8761/eureka/访问停靠的eureka服务器,或者通过http://{Ubuntu server}:8088/user服务访问停靠的服务。

但是在docker compose日志中,我发现了错误,看到附件我不知道为什么它一直说未知服务器。

并且在eureka服务器网站中,没有显示应用实例。这个错误信息已经让我困惑了好几天,我已经调查了我能想到的每一种可能性。请给我任何线索。谢谢你。

背景:

Virtualbox: 5.1.20

Ubuntu VM: ubuntu-16

docker installed: 17.06.0

Registry: localhost:5000

Network: Bridge mode in Virtualbox for Ubuntu VM, so that the VM has a standalone ip that could be accessed by other computer

Eureka服务器配置:

server:
  port: ${vcap.application.port:8761} #Http port

eureka:
  instance:
    hostname: eureka
    #prefer-ip-address:true

  client:
    registerWithEureka: false
    fetchRegistry: false
    defaultZone: http://${eureka.instance.hostname}:8761/eureka/
  #server:
    waitTimeInMsWhenSyncEmpty: 0

微服务配置:

spring:
  application:
    ## Define the service name for registering on Eureka
    name: user-service
  profiles: docker

eureka:
  client:
    serviceUrl:
      defaultZone: http://eureka:8761/eureka/
    fetch-registry: true
    register-with-eureka: true
  instance:
    prefer-ip-address: true
    metadataMap:
      instanceId: ${vcap.application.instance_id:${spring.application.name}:${spring.application.instance_id:${random.value}}}

endpoints:
    restart:
      enabled: true
    shutdown:
      enabled: true
    health:
      sensitive: true

Docker撰写:

discovery-eureka:
  image: localhost:5000/nicolas/eureka:0.0.1-SNAPSHOT
  ports:
   - "8761:8761"
  hostname: eureka

user-service:
  image: localhost:5000/nicolas/user:0.0.1-SNAPSHOT
  ports:
  - "8088:8088"
  links:
  - discovery-eureka

共有1个答案

壤驷涛
2023-03-14

问题解决了,神奇的事情是Spring配置文件定义application.yml用户服务。

我从一开始就忽略了这个定义,我的docker compose。之前的yml定义:

discovery-eureka:
  image: localhost:5000/nicolas/eureka:0.0.1-SNAPSHOT
  ports:
  - "8761:8761"
  hostname: eureka

user-service:
  image: localhost:5000/nicolas/user:0.0.1-SNAPSHOT
  ports:
  - "8088:8088"
  links:
  - discovery-eureka

在这个文件中,没有地方告诉容器(或JVM)使用在用户服务application.yml中定义的docker配置文件。

一旦容器初始化,它将使用默认配置文件,application.yml元数据将不会普及。

后来我把docker-compose.yml改成下面,一切正常。

discovery-eureka:
  image: localhost:5000/nicolas/eureka:0.0.1-SNAPSHOT
  ports:
  - "8761:8761"
  hostname: eureka

user-service:
  image: localhost:5000/nicolas/user:0.0.1-SNAPSHOT
  ports:
  - "8088:8088"
  environment:
    - "SPRING_PROFILES_ACTIVE=docker"
  links:
  - discovery-eureka

这个主意是我从http://www.littlebigextra.com/use-spring-profiles-docker-containers/

 类似资料:
  • 我有一个简单的spring引导的微服务(用户服务)和一个spring引导的网关服务(网关-服务器),使用Zuul设置到Eureka服务器(发现服务)注册。向用户-服务发送请求直接起作用,并且所有服务都成功地注册到eureka服务器。当我向网关服务器发送请求时,我会得到一个转发错误,原因是“com.netflix.client.clientException:Load balancer没有用于客户端

  • 在本章中,您将详细了解如何将Spring Boot Micro服务应用程序注册到Eureka Server中。 在注册应用程序之前,请确保Eureka Server在端口8761上运行或首先构建Eureka Server并运行它。 有关构建Eureka服务器的更多信息,请参阅上一章。 首先,您需要在我们的构建配置文件中添加以下依赖项,以便向Eureka服务器注册微服务。 Maven用户可以将以下依

  • 我正在尝试注册一个客户端到spring-eureka-server,客户端在注册后就注销了 Eureka-客户端日志: 请告诉我有什么可能出了问题。

  • 我有一个工作中的Eureka注册表,其中注册了许多Spring-Boot应用程序。我知道这是有效的,因为他们能够找到对方,并通过尤里卡注册中心进行交流。 当我启动我的新SBA应用程序时,我可以看到它自己在Eureka注册表中注册,所以它正在查找Eureka。然而,当我打开SBA UI时,它是空的,只是说“没有应用程序注册。”在我的控制台上,我可以一遍又一遍地看到下面的堆栈跟踪。

  • 我刚刚关注了下面这篇文章,https://spring.io/blog/2015/07/14/microservices-with-spring,但是我无法在尤里卡注册我的微服务。 customer-service.yml build . gradle for customer-service CustomerService.java 注册-server.yml