在使用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()方法。
相关推荐
本系列介绍的配置均基于 Spring Boot 2.1.1.RELEASE 版本和 Spring Cloud Greenwich.RC1 版本.Eureka客户端-生产者
使用eclipse创建spring cloud的eureka客户端和eureka服务端demo,参考地址: https://blog.csdn.net/qq_42382972/article/details/85843080
python 一个 Python 编写的 eureka 客户端,同时支持注册与发现服务,能使得你的代码非常方便地接入 spring cloud 中。
本系列介绍的配置均基于 Spring Boot 2.1.1.RELEASE 版本和 Spring Cloud Greenwich.RC1 版本.使用feign的服务消费者Demo代码
搭建SpringCloud中的Eureka的服务端和客户端,例子很简单,却很实用,导入项目之后,自动导入依赖,后,启动项目就可以用,还有详细的说明文档
一个 Python 编写的 eureka 客户端,同时支持注册与发现服务,能使得你的代码非常方便地接入 spring cloud 中
Netflix OSS服务注册表Eureka( )的客户端JavaScript实现。 用法 首先,将模块安装到您的节点项目中: npm install eureka-js-client --save 将Eureka客户端添加到Node应用程序。 Eureka模块导出可以构造...
Eureka分为服务器端和客户端,客户端每隔一段时间就会向服务器端发送一次讯息,向服务器说明自己还正常,让服务器端继续维护自己的服务,不要从服务列表里面把自己给剔除了。同时,设置一个让服务器端等待自己的时间...
spring cloud eureka 注册中心客户端
然后,我们将Eureka客户端集成到每个微服务实例中。这个客户端将自动向Eureka服务器注册实例,并周期性地发送心跳以保持注册信息的最新状态。 一旦所有微服务实例都成功注册到Eureka服务器,其他微服务可以使用...
Netflix OSS / Spring Cloud捆绑的eureka堆栈的异步Naive Eureka客户端。 安装 注意:这支持Python 3.5+ $ pip install wasp-eureka 如果只想独立运行,请包括以下依赖项: $ pip install wasp-eureka[standalone...
eureka客户端
正常eureka配置后仍然连不上不要慌,首先检查一些父工程里有没有配maven补丁
spring boot 注册中心jar包,创建spring boot 项目的注册中心核心jar包
该压缩包包含了3个demo,分别是eureka注册中心,两个eureka客户端,解压后请先查看根目录下的README.md,有助于使用。
该项目主要包含了一个springcloud框架中的服务注册与服务发现的常用框架的eureka的实例,共包含eureka-client和eureka-server两个模块,打开项目,先启动eureka-server项目,通过localhost:端口便可访问eureka-...
Eureka Server已经打包好,可以直接放到tomcat下webapps目录中,启动tomcat后,访问http://localhost:8080/eureka/;服务启动过程中有日志错误,属于正常情况。https://www.cnblogs.com/lifuping/p/5663127.html
Eureka服务端介质,搭建本地的微服务注册与发现中心,spring开发必备,启动命令java -jar eurekaserver01-0.0.1-SNAPSHOT.jar > eurekaserver01.log
主要介绍了SpringCloud添加客户端Eureka Client过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
很简单的demo,先启动eureka服务,再启动两个客户端即可访问