Eureka Client介绍
Eureka Client是对应于Eureka Server的客户端,用于与Eureka Server进行通信。对于应用来说,Eureka Client又可以分为应用的服务端和应用的客户端,它们之间的关系如下图所示。应用服务端向Eureka Server注册它自己,应用客户端从Eureka Server获取应用服务信息,从而能够直接对应用服务端发起调用。
使用Eureka Client需要添加如下依赖。
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
添加了spring-cloud-starter-netflix-eureka-client
依赖后Eureka Client默认会自动向Eureka Server进行注册,默认访问的Eureka Server是http://localhost:8761/eureka/
。如果你的Eureka Server不是部署在localhost或者监听端口不是8761,可以在application.properties文件中通过eureka.client.serviceUrl.defaultZone
进行指定。Eureka Client向Eureka Server注册的服务id会取spring.application.name
的值,如果没有在application.properties文件中定义spring.application.name
,则默认会是UNKOWN。所以作为Eureka Client的应用服务端,通常需要在application.properties中定义spring.application.name
。对于服务提供者来说,作为Eureka Client时最重要的是instanceId,每个instanceId都要是唯一的,默认的instanceId是如下形式的。
${spring.cloud.client.hostname}:${spring.application.name}:${spring.application.instance_id:${server.port}}}
也就是说,如果你的应用是一个服务提供者,对应的应用名称是app1,hostname是host1,发布的端口号是8080,则对应的instanceId是host1:app1:8080
,如果同样一个服务在8081端口也发布了,则其instanceId默认是host1:app1:8081
。
server.port
需要在application.properties文件中指定,其不是默认自动获取的,而spring.cloud.client.hostname
将自动获取本机的hostname。
可以通过eureka.instance.instanceId
自定义instanceId的取值,比如下面就定义了instanceId为hostname:port
形式。
eureka.instance.instanceId=${spring.cloud.client.hostname}:${server.port}
对于Eureka Client还可以通过eureka.instance.preferIpAddress=true
指定在需要获取hostname时优先返回当前主机的IP地址。此时可以通过${spring.cloud.client.ip-address}
作为当前主机IP的占位符,所以可以在定义instanceId时使用${spring.cloud.client.ip-address}
占位符获取当前主机的IP地址,比如下面就定义了instanceId为ip:port
形式。
eureka.instance.preferIpAddress=true
eureka.instance.instanceId=${spring.cloud.client.ip-address}:${server.port}
如果你应用是纯粹的作为应用客户端,那么你对应的Eureka Client可能就不需要向Eureka Server进行注册了,此时可以通过eureka.client.registerWithEureka=false
指定不注册到Eureka Server。
Eureka Client作为从Client的角度可以配置的完整配置信息可以参考org.springframework.cloud.netflix.eureka.EurekaClientConfigBean
的API文档或源码,从Instance的角度可以配置的完整配置信息可以参考org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean
的API文档或源码。Eureka Client默认会每30秒发送一次心跳到Eureka Server,从Eureka Server的角度默认90秒收不到一个Eureka Client的心跳即认为该Eureka Client不可用了。可以在Eureka Client通过eureka.instance.leaseRenewalIntervalInSeconds=20
指定Eureka Client每20秒发送一次心跳到Eureka Server。可以在Eureka Server通过eureka.instance.leaseExpirationDurationInSeconds=60
指定当超过60秒还收不到一个Eureka Client的心跳,则认为该Eureka Client不可用了。Eureka Client默认每30秒从Eureka Server获取一次注册的服务信息,可以通过eureka.client.registryFetchIntervalSeconds=10
指定每10秒获取一次服务注册信息。Eureka Server默认会每60秒做一次清理不可用的Eureka Client的操作,可以通过eureka.server.evictionIntervalTimerInMs=120000
指定每120秒做一次清理操作。
作为应用的客户端,我们可以通过注入com.netflix.discovery.EurekaClient
实例,然后通过EurekaClient实例获取提供某个服务的应用服务端的一个实例地址,从而能够进行对应的业务调用。在下面的instanceUrl()
中通过注入的EurekaClient实例的getNextServerFromEureka()
获取了服务spring-cloud-service-provider
(其对应应用服务端的${spring.application.name}
)的一个实例信息,进而获取到了该实例的首页地址。
@Autowired
private EurekaClient eurekaClient;
@GetMapping("instance")
public String instanceUrl() {
String virtualHostname = "spring-cloud-service-provider";
InstanceInfo instanceInfo = this.eurekaClient.getNextServerFromEureka(virtualHostname, false);
return instanceInfo.getHomePageUrl();
}
除了使用原生的EurekaClient,也可以选择使用Spring包装的org.springframework.cloud.client.discovery.DiscoveryClient
,其用法更简单。
@Autowired
private DiscoveryClient discoveryClient;
@GetMapping("instance2")
public String instanceUrl2() {
String serviceId = "spring-cloud-service-provider";
List<ServiceInstance> instances = this.discoveryClient.getInstances(serviceId);
if (CollectionUtils.isNotEmpty(instances)) {
return instances.get(0).getUri().toString();
}
return null;
}
DiscoveryClient是Spring Cloud对服务发现的一个抽象包装,其可以有很多不同的实现,除了基于Eureka的实现外EurekaDiscoveryClient,还会有基于Consul的实现ConsulDiscoveryClient等。如果有需要用户也可以实现自己的DiscoveryClient实现。使用自定义的DiscoveryClient实现时,通常你还会实现自定义的ServiceRegistry。ServiceRegistry看着名字应该就知道是用来进行服务注册的。
取到了应用服务提供者的服务地址后,就可以调用对应的服务了,比如服务提供者spring-cloud-service-provider
在/hello
这个路径上发布了一个服务,通过下面的方式就可以访问到这个服务,并获得对应的返回。
@Autowired
private RestTemplateBuilder restTemplateBuilder;
@GetMapping("world")
public String helloWorld() throws Exception {
String instanceUrl = this.instanceUrl();
String serviceUrl = instanceUrl + "hello";
String result = this.restTemplateBuilder.build().getForObject(new URI(serviceUrl), String.class);
return result;
}
使用Spring Cloud的应用通常我们不会直接使用DiscoveryClient或EurekaClient获取到服务地址,再往指定的服务地址发起请求,而是使用更加简单的Feign。
(注:本文是基于Spring cloud Finchley.SR1所写)
相关推荐
在本教程中,我们将深入探讨SpringCloud的核心组件之一——Eureka,它是一个服务注册与发现的工具,使得微服务架构中的各个服务能够互相找到并进行通信。我们将通过两个主要步骤来学习如何使用Eureka:创建服务注册...
Spring Cloud Eureka是Spring Cloud框架中的一个核心组件,主要用于实现微服务之间的服务发现和服务治理。在微服务架构中,每个服务可能都会独立部署和扩展,Eureka作为一个服务注册中心,帮助各个服务实例进行注册...
本教程将详细介绍如何整合SpringCloud与Eureka,创建一个基本的服务发现示例。 首先,我们需要理解Eureka的工作原理。Eureka是一个基于REST的服务,它作为服务注册中心,使得各个微服务能够相互发现。每个微服务在...
7. **配置与使用**:在Spring Cloud项目中,可以通过配置文件(如`application.yml`或`application.properties`)来设置Eureka Server和Eureka Client的相关参数,比如服务注册的超时时间、心跳间隔、服务发现的重试...
在SpringCloud框架中,Eureka是作为服务发现和注册中心的核心组件,而配置中心则用于集中管理和分发应用的配置,使得微服务架构中的各个服务能够动态地获取和更新配置。下面将详细介绍这两个核心概念以及如何在一个...
<artifactId>spring-cloud-starter-netflix-eureka-client ``` 接下来,我们需要配置 Eureka 客户端。在 Spring Boot 的 `application.yml` 或 `application.properties` 文件中,设置 Eureka 服务器的地址以及...
SpringCloud是中国开发者广泛使用的微服务框架之一,其中Eureka是其核心组件,主要负责服务的注册与发现。本文将深入探讨Eureka的工作原理、配置以及如何在实际项目中使用它来构建服务注册中心和实现服务提供者的...
本篇将深入探讨SpringCloud中的两个关键组件——Eureka和Gateway,以及如何将它们整合到一起,构建高效、稳定的微服务架构。 一、Eureka:服务注册与发现 Eureka是SpringCloud中的服务注册与发现组件,它允许服务...
在这个SpringCloud05-EurekaServer的学习过程中,你将掌握如何设置和使用EurekaServer,无论是单机模式还是集群模式,这将为你的微服务架构打下坚实的基础。通过尚硅谷官网的视频教程,你将得到更详细的指导和实践...
标题 "springCloud+eureka" 提示我们将探讨如何结合 Spring Cloud 和 Eureka 构建微服务架构。 1. **Eureka 的基本概念** - **服务注册**:每个微服务启动时,都会向 Eureka Server 注册自己的信息,包括服务名、...
本项目"springcloud-Netflix-eureka demo"提供了一个基于Spring Boot搭建的基础服务框架,旨在帮助开发者理解和学习如何使用Eureka进行服务注册与发现,以及Ribbon客户端负载均衡。 首先,我们来看Eureka。Eureka是...
配置Spring Boot和Spring Cloud的版本,如示例中的SpringBoot 2.0.0.M3和SpringCloud Finchley.M2。 3. 配置服务器的启动类,通常通过`@EnableEurekaServer`注解启用Eureka Server功能。 - 创建Eureka Client: 1...
在分布式系统中,服务治理是至关重要的,Spring Cloud Eureka作为一个服务发现组件,帮助企业构建高可用的服务网络。本文将详细讲解如何搭建一个基于Spring Cloud 2.0的Eureka集群,以便实现多个Eureka注册中心的高...
在Spring Cloud 2.0版本中,Eureka Server的配置相比1.x版本确实有了一些显著的变化,尤其是在结合Spring Security进行安全设置时。Spring Cloud Eureka是Netflix Eureka的Spring Boot实现,它为微服务架构提供了...
这通常涉及设置`spring.cloud.netflix.eureka.client.register-with-eureka=true`和`spring.cloud.netflix.eureka.client.fetch-registry=true`,这样服务就会自动注册到Eureka Server,并定期获取服务列表。...
在本实例中,我们主要探讨的是Spring Cloud框架中的几个关键组件——Zuul、Config、Eureka和Ribbon,这些都是微服务架构中的重要工具。让我们逐一解析这些组件及其作用。 首先,Spring Cloud Config是一个集中式的...
总之,Eureka Server是Spring Cloud微服务架构中的重要组件,它的功能和服务发现机制对于构建分布式系统至关重要。通过以上步骤,你已经掌握了如何快速搭建一个基础的Eureka Server,为进一步学习和实践Spring Cloud...
在这个案例中,我们专注于SpringCloud的核心组件之一——Eureka,它是服务发现的重要工具。服务发现允许微服务之间找到并互相通信,使得系统具有更好的可扩展性和解耦性。 Eureka是Netflix开发的一个基于REST的服务...
- `@Autowired` 注解的`EurekaClient`接口,可以用来获取服务实例信息。 - `InstanceInfo`对象:包含了服务实例的详细信息,如ID、状态、端口等。 6. **健康检查与自我保护模式**: Eureka客户端有健康检查机制...
SpringCloud Eureka是微服务架构中的关键组件,它作为一个服务注册与发现的工具,使得服务之间的调用变得简单。在最新版本2.x.x中,Eureka提供了更稳定、高效的特性来支持大规模分布式系统的构建。 首先,让我们...