在使用Spring Cloud多人协作开发时有一个场景:我本机启动了Eureka注册中心,其他人机器需要将服务注册到我本机的Eureka。(服务端和客户端在不同机器上)
这时出现了一个问题:服务成功注册到Eureka,但是该服务接口无法访问。
查看日志:gateway下的日志显示服务找不到。
查找问题:尝试telnet该服务的IP地址,发现网络不通。为了确认IP地址无误,找到那台机器,发现机器上还启动了虚拟机,存在多个网卡。服务启动在PC本地,注册时将虚拟机的IP注册到了Eureka,所以无法访问。
为了解决这个问题,网上查找了一些资料,并做了一些尝试。有以下几种方案:
一、忽略指定网卡
在Eureka客户端加上配置:
spring: cloud: inetutils: # 忽略指定网卡,支持正则表达式(这里使用正则表达式忽略所有虚拟机网卡) ignoredInterfaces: ['VMware.*'] eureka: instance: #注册时使用ip而不是主机名 prefer-ip-address: true
二、客户端指定IP
指定IP有三种方式:
- 在Eureka客户端加上配置:
eureka: instance: #注册时使用ip而不是主机名 prefer-ip-address: true # 指定此客户端的ip ip-address: 127.0.0.1-----关键在这里客户端通信用的ip
- 或
spring: cloud: inetutils: # 指定此客户端的ip default-ip-address: 127.0.0.1 eureka: instance: #注册时使用ip而不是主机名 prefer-ip-address: true
- 客户端启动时指定IP(未测试)
java -jar -Dspring.cloud.inetutils.preferred-networks=127.0.0.1
三、配置hosts文件
配置本机的主机名,然后再/etc/hosts
文件中将本机的主机名映射到指定有效的IP地址。
四、使用本地网卡
这个方法在我测试的时候的无效的,但是看到很多文章有写,不知道是不是我哪里配置还有问题,所以在这里也列出来。
在Eureka客户端加上配置:
spring: cloud: inetutils: # 是否启用本地回环网卡 use-only-site-local-interfaces: true eureka: instance: #注册时使用ip而不是主机名 prefer-ip-address: true
示例:
eureka: instance: statusPageUrlPath: /info healthCheckUrlPath: /health prefer-ip-address: true---注册是用ip ip-address: ${spring.cloud.client.ipAddress}----注册客户端之间通信的各自地址 instance-id: ${spring.cloud.client.ipAddress}:${server.port} ---注册实例id client: serviceUrl: defaultZone: http://127.0.0.1:8761/eureka/ server: port: 8203 spring: application: name: onlineloan-loan-service----注册实例名 info: version: 1 management: context-path: /
总结
这些配置的目的就一个,使客户端注册时使用真实有效的IP。需要通过一些配置,使它注册时使用我们理想的IP,这跟Eureka Client探测本机IP的逻辑有关。查找资料,Eureka Client探测本机IP的实现是调用了Spring的InetUtils工具类的findFirstNonLoopbackAddress()方法。该方法会获取所有网卡,取ip地址合理、索引值最小且不在忽略列表的网卡的IP地址作为结果。如果没有找到合适的IP, 就调用InetAddress.getLocalHost()方法。
相关推荐
Eureka 是 Netflix 开发的一个基于 REST 的服务发现组件,它在微服务架构中扮演着关键角色,帮助服务之间互相发现和通信。在这个“Eureka 客户端 - 服务提供者”的主题中,我们将深入探讨如何在 Spring Boot 应用...
接下来是Eureka客户端的搭建。客户端通常是你的微服务应用,它们需要向Eureka Server注册自身。同样创建一个新的Spring Boot项目,这次添加的是Eureka Client的依赖: ```xml <groupId>org.springframework.cloud...
此外,还可以通过`@EnableEurekaClient`注解开启Eureka客户端功能。 5. **服务健康检查** Eureka不仅提供服务注册,还负责健康检查。默认情况下,Eureka Server会通过HTTP的健康检查接口来判断服务是否可用。...
首先,为了将一个Spring Cloud应用转变为Eureka客户端,我们需要在项目中添加Eureka Client的依赖。在Maven的`pom.xml`文件中,引入以下依赖: ```xml <groupId>org.springframework.cloud <artifactId>spring-...
- 服务提供者源码优化可能包括:使用`@LoadBalanced`注解自动处理负载均衡,配置Eureka客户端的超时和重试策略,以及使用`@HystrixCommand`进行服务降级和熔断处理。 - 服务消费者源码优化可能涉及:使用Feign或...
Eureka主要由两个组件构成:Eureka Server(服务注册服务器)和Eureka Client(服务提供者和服务消费者客户端)。 1. **Eureka Server**: 提供服务注册和发现功能,每个服务实例都会向其注册并保持心跳。 2. **...
在它们的配置中,设置`eureka.client.serviceUrl.defaultZone`为所有Eureka服务器的URL列表,这样客户端就能从任何可用的服务器获取服务信息。 在"study_0307_eureka"压缩包文件中,可能包含了示例代码或配置文件,...
在Spring Boot客户端,我们需要引入Spring Cloud的Eureka客户端依赖,并配置相关参数,例如服务ID、Eureka服务器的地址等。然后,通过`@EnableEurekaClient`注解启用Eureka客户端功能。当Spring Boot应用启动时,它...
Eureka 客户端在配置集群时,只需要将 `defaultZone` 设置为所有 Eureka 服务器的 URL,多个 URL 之间使用逗号分隔。这样,客户端就能向任意一个 Eureka 集群节点注册,并能从集群中获取服务列表。 总结起来,...
2. **配置Eureka客户端**:在服务提供者和消费者项目中引入Eureka客户端依赖,配置服务名、Eureka Server地址、心跳间隔等参数。 3. **服务注册**:在服务启动类上添加@EnableEurekaClient注解,让Spring Boot应用...
Eureka源码库在GitHub上有公开的访问,通过访问对应的GitHub链接,可以查看Eureka的源码,了解其实现原理和细节。Eureka是Spring Cloud生态系统中不可或缺的一部分,随着Spring Cloud的流行,Eureka也被广泛地应用在...
1. **安全性增强**:Eureka Server提供了更强大的安全配置,支持OAuth2认证,可以通过配置SSL证书来提高通信的安全性,同时也可以配置访问控制策略,保护服务注册信息不被非法访问。 2. **健康检查机制**:Eureka...
接着,我们需要创建Eureka客户端,即服务提供者和服务消费者: 1. **创建服务提供者**:同样使用Spring Initializr初始化Spring Boot项目,这次需要添加`spring-cloud-starter-netflix-eureka-client`依赖,同时...
部署Eureka Server实例之后,其他微服务应用就可以作为Eureka客户端(Eureka Client)向Eureka Server注册自己的信息,并能够发现其他注册在Eureka上的服务。这样,整个微服务架构就能够实现自动化的服务注册和发现...
此外,`eureka.instance.prefer-ip-address` 设置为 `true` 表示使用 IP 地址注册到 Eureka,而不是主机名,这样能提高服务发现的稳定性。通过 `eureka.instance.instance-id` 配置,你可以自定义服务实例的唯一标识...
在分布式系统中,服务治理是不可或缺的一环,而Spring Cloud Eureka则是Netflix开源的一个用于实现服务注册与发现的组件,它使得微服务架构中的服务能够互相找到并进行通信。本项目是一个SpringCloud Eureka集群的...
JWT通过在客户端和服务端之间传递一个包含签名的JSON对象,实现了这一目标。JWT由三部分组成:Header、Payload和Signature。Header包含了令牌的类型和加密算法,Payload存储了用户信息或者权限声明,Signature用于...
4. **Eureka客户端配置** - 客户端需要配置`eureka.client.serviceUrl.defaultZone`,指向Eureka集群中的任一实例,客户端会自动发现其他实例。 - 客户端在注册时,会将服务注册到所有Eureka服务器实例,确保服务...
接下来,你可以将其他微服务应用配置为Eureka客户端,实现服务注册和发现功能。在客户端配置中,需要设置`eureka.client.register-with-eureka`和`eureka.client.fetch-registry`为`true`,并指定Eureka Server的...