spring-boot - 微服务未在所有 Eureka 实例上注册

标签 spring-boot microservices spring-cloud netflix-eureka high-availability

Spring Boot版本:2.1.6.RELEASE

Spring Cloud版本:Greenwich.SR1

目标是在集群中设置两个Eureka Server实例,并将所有微服务注册到两个实例上,以实现HA。目前我正在运行 Ubuntu 18.04 的本地计算机上对此进行测试。

所以正如官方文档中提到的,我已经设置了Eureka实例的点对点感知。启动两个 Eureka 服务器实例后,在可用副本下的 Instance-1(端口 8080)仪表板上显示 Instance-2 名称,在 Instance-2(端口 8081)仪表板上显示 Instance-1 名称。到目前为止一切顺利。

我已将它们作为 war 部署在外部 tomcat 服务器上,而不是作为 jar 运行它们。 war 名称是“eureka-naming-server”。那么我的访问URL就变成:http://localhost:8080/eureka-naming-server/eurekahttp://localhost:8081/eureka-naming-server/eureka .

我已经使用 Apache 2 和 mod_jk 设置了一个负载平衡器。因此,不要使用各自的 URL 来访问它们,即 http://localhost:8080/eureka-naming-server/eureka , http://localhost:8081/eureka-naming-server/eureka ,我可以使用 Apache URL 作为 http://localhost:80/eureka-naming-server/eureka 访问它们我可以看到负载平衡正常进行。

现在的问题是,一旦我将 Eureka URL 设置为 http://localhost:80/eureka-naming-server/eureka在微服务中,它仅在一个实例上注册,具体取决于负载均衡器重定向请求的 Eureka 实例。但即使设置了对等感知,微服务也没有在另一个 Eureka 实例上注册。

在 Eureak 服务器中,我使用以下依赖项:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>

Eureka-1 Prop :

spring:
  application:
    name: eureka-naming-server
  jmx:
    default-domain: eureka-naming-server
eureka:
  client:
    service-url:
      defaultZone: http://eureka-server-2:8081/eureka-naming-server/eureka

    #register-with-eureka: false
    #fetch-registry: false
  instance:
    hostname: eureka-server-1

Eureka-2 Prop :

spring:
  application:
    name: eureka-naming-server
  jmx:
    default-domain: eureka-naming-server
eureka:
  client:
    service-url:
      defaultZone: http://eureka-server-1:8080/eureka-naming-server/eureka

    #register-with-eureka: false
    #fetch-registry: false
  instance:
    hostname: eureka-server-2

在微服务中,我使用以下依赖项:

<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
   <groupId>org.springframework.cloud</groupId>
   <artifactId>spring-cloud-starter-netflix-ribbon</artifactId>
</dependency>

微服务 Prop :

eureka:
  instance:
    metadata-map:
      configPath: /config
  client:
    service-url:
      defaultZone: http://localhost/eureka-naming-server/eureka

在机器的/etc/hosts 文件中,我将其设置为:

127.0.0.1 eureka-server-1

127.0.0.1 eureka-server-2

在其上注册的 Eureka 实例我可以在日志中看到以下内容:

WARN 13748 --- [nio-8009-exec-3] Registered instance CONFIG-SERVER/192.168.1.16:config-server:8888 with status UP (replication=false)

另一个未注册的 Eureka 实例,当它由于负载均衡器而收到心跳时,会在日志中显示以下内容:

WARN 13748 --- [nio-8009-exec-3] c.n.e.registry.AbstractInstanceRegistry  : DS: Registry: lease doesn't exist, registering resource: CONFIG-SERVER - 192.168.1.16:config-server:8888
2019-12-26 19:00:34.995  WARN 13748 --- [nio-8009-exec-3] c.n.eureka.resources.InstanceResource    : Not Found (Renew): CONFIG-SERVER - 192.168.1.16:config-server:8888

Eureka-1 仪表板

enter image description here

Eureka-2 仪表板

enter image description here

我已经尝试过提到的建议herehere 。但似乎没有任何作用。

那么我可能会错过什么?

最佳答案

问题:

spring:
  application:
    name: eureka-naming-server

您为应用程序输入相同的名称,因此它的显示如下。

您需要将其更改为,

Eureka-1 Prop :

spring:
  application:
    name: eureka-naming-server-1

Eureka-2 Prop :

spring:
  application:
    name: eureka-naming-server-2

关于spring-boot - 微服务未在所有 Eureka 实例上注册,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59489749/

相关文章:

java - 如何使用Spring boot通过post方法在postman中发送2个不同的对象?

java - Spring data rest findBy securityCheck 用于嵌套实体

java - Eclipse:多个 'Run as Java Application' 相继链接

java - 如何从另一个 Java 微服务使用 JWT 安全微服务

spring - 如何为开发属性禁用 spring-cloud 配置服务器

java - spring boot mvc - 不支持内容类型 'application/json;charset=UTF-8'

java - SpringBoot 2 与 Flyway : spring. Flyway.locations 被忽略

java - 如何使用 spring boot 和 maven 测试微服务

spring-boot - Spring Cloud Consul健康检查配置

java - Spring Cloud @SqsListener MessageConversionException : Cannot convert from [java. lang.String] for GenericMessage