Eureka、Feign远程调用原理

        Eureka客户端相关配置

        Eureka配置其实有很多,笔者最近就遇到了一些特殊情况的应用,当本地环境中的微服务模块需要依赖其他模块的微服务但本地却没跑起来时,选择使用了测试服务器中的eureka来进行远程注册与调用,此时就需要额外配置,将自身服务选择不注册到eureka,但却又能够使用eureka注册表,顺便查了一下,eureka客户端的注册配置还挺多的。

   # Eureka服务端地址,多个地址可用逗号分隔
   eureka.client.service - url.defaultZone = http://localhost:8761/eureka/
   # 决定客户端是否将自身注册到Eureka服务中心,true为注册,false为不注册
   eureka.client.register - with - eureka = true
   # 决定客户端是否从Eureka服务中心获取注册表,true为获取,false为不获取
   eureka.client.fetch - registry = true
   # 服务实例在Eureka服务器中的唯一标识,可自定义,示例按应用名+主机名+端口号生成
   eureka.instance.instance - id = ${spring.application.name}-${spring.cloud.client.hostname}-${server.port}
   # 客户端向服务端发送心跳的间隔时间,默认30秒
   eureka.instance.lease - renewal - interval - in - seconds = 30
   # 服务端在多长时间内没有收到客户端的心跳后,认为客户端已下线,默认90秒
   eureka.instance.lease - expiration - duration - in - seconds = 90
   # 可在这添加自定义元数据信息,如服务版本号、环境信息等
   eureka.instance.metadata - map.version = 1.0
   eureka.instance.metadata - map.environment = dev
   # 自定义健康检查的URL路径,示例基于Spring Boot Actuator(需启用)
   eureka.instance.health - check - url = http://${eureka.instance.hostname}:${server.port}/actuator/health
   # 如果健康检查URL不是默认路径,可指定具体路径
   eureka.instance.health - check - url - path = /health
   # 设置是否启用健康检查
   eureka.client.healthcheck.enabled = true
   # 客户端是否优先选择和自己在同一区域(zone)的Eureka Server进行通信,默认true
   eureka.client.prefer - same - zone - eureka - servers = true
   # 客户端从Eureka Server获取服务注册表的间隔时间(单位:秒),默认30秒
   eureka.client.registry - fetch - interval - seconds = 30
   # 用于刷新缓存的线程池大小
   eureka.client.cache - refresh - executor - thread - pool - size = 5
   # 重试次数的乘数
   eureka.client.retry - count - multiplier = 2
   # 重试延迟的乘数
   eureka.client.retry - delay - multiplier = 1.5
   # 如果Eureka Server配置了安全认证,设置轮询获取安全认证相关信息的间隔时间
   eureka.client.eureka - service - url - poll - interval - seconds = 60
   # 用于向Eureka Server进行认证的密码(配合服务端安全认证配置)
   eureka.client.eureka - authentication - password = your_password
   # 用于向Eureka Server进行认证的用户名(配合服务端安全认证配置)
   eureka.client.eureka - authentication - username = your_username

Eureka 在微服务框架中主要承担服务注册与调用表的功能,Feign 的远程调用依赖于 Eureka 所提供的注册表。

那么,Feign 远程调用与 Eureka 组件是怎样建立联系的呢?

回顾 Feign 远程调用步骤,服务提供方和使用方均需将自身注册到 Eureka 中,并能够访问服务中心的注册表。随后,服务调用方要在其模块创建 Feign 客户端接口,并使用 @FeignClient 注解标注被调用的模块名。最后,在启动类 Application 中添加 @EnableFeignClients 注解开启 Feign 客户端代理对象。Eureka、Feign远程调用原理_第1张图片

进一步探究 Feign 的调用原理,服务提供方和调用方都在 Eureka 注册中心的服务注册表完成注册,该注册表会记录服务的名称与相应地址。接着,调用服务方借助 @FeignClient 注解寻觅被调用的微服务,而查找的途径正是 Eureka 的服务注册表。由此可见,Feign 的远程调用实质是从注册中心获取接口地址,Eureka 并非服务提供方,仅为接口注册表的存储之处。当本地服务通过 Feign 调用远程注册中心中的服务时,若远程服务接口未开放,即便服务调用方已在 Eureka 注册,且远程注册中心接口开放,由于服务提供方不在本地,其他服务与本地服务也不在同一主机内,本地服务依然无法访问远程服务接口,也就无法通过 Feign 进行远程调用。

综上所述,假设我们需要通过feign调用远程服务时,则需要注意,无论是服务调用方,注册中心,还是远程的服务提供方都需要开放接口才能够实现feign的远程调用。

 

 

你可能感兴趣的:(eureka,云原生,spring,boot,spring,cloud)