`
234390216
  • 浏览: 10238500 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
博客专栏
A5ee55b9-a463-3d09-9c78-0c0cf33198cd
Oracle基础
浏览量:462879
Ad26f909-6440-35a9-b4e9-9aea825bd38e
springMVC介绍
浏览量:1775972
Ce363057-ae4d-3ee1-bb46-e7b51a722a4b
Mybatis简介
浏览量:1398730
Bdeb91ad-cf8a-3fe9-942a-3710073b4000
Spring整合JMS
浏览量:395156
5cbbde67-7cd5-313c-95c2-4185389601e7
Ehcache简介
浏览量:680167
Cc1c0708-ccc2-3d20-ba47-d40e04440682
Cas简介
浏览量:531135
51592fc3-854c-34f4-9eff-cb82d993ab3a
Spring Securi...
浏览量:1184996
23e1c30e-ef8c-3702-aa3c-e83277ffca91
Spring基础知识
浏览量:468788
4af1c81c-eb9d-365f-b759-07685a32156e
Spring Aop介绍
浏览量:151486
2f926891-9e7a-3ce2-a074-3acb2aaf2584
JAXB简介
浏览量:68337
社区版块
存档分类
最新评论

Spring Cloud(05)——Eureka Client介绍

阅读更多

Eureka Client介绍

Eureka Client是对应于Eureka Server的客户端,用于与Eureka Server进行通信。对于应用来说,Eureka Client又可以分为应用的服务端和应用的客户端,它们之间的关系如下图所示。应用服务端向Eureka Server注册它自己,应用客户端从Eureka Server获取应用服务信息,从而能够直接对应用服务端发起调用。

eureka_client_architecture.png

使用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所写)

0
0
分享到:
评论

相关推荐

    最简单的 SpringCloud 教程——服务的注册与发现(Eureka)

    在本教程中,我们将深入探讨SpringCloud的核心组件之一——Eureka,它是一个服务注册与发现的工具,使得微服务架构中的各个服务能够互相找到并进行通信。我们将通过两个主要步骤来学习如何使用Eureka:创建服务注册...

    spring cloud eureka(免费下载)

    Spring Cloud Eureka是Spring Cloud框架中的一个核心组件,主要用于实现微服务之间的服务发现和服务治理。在微服务架构中,每个服务可能都会独立部署和扩展,Eureka作为一个服务注册中心,帮助各个服务实例进行注册...

    springcloud整合Eureka的demo

    本教程将详细介绍如何整合SpringCloud与Eureka,创建一个基本的服务发现示例。 首先,我们需要理解Eureka的工作原理。Eureka是一个基于REST的服务,它作为服务注册中心,使得各个微服务能够相互发现。每个微服务在...

    springcloud-eureka.zip

    7. **配置与使用**:在Spring Cloud项目中,可以通过配置文件(如`application.yml`或`application.properties`)来设置Eureka Server和Eureka Client的相关参数,比如服务注册的超时时间、心跳间隔、服务发现的重试...

    springcloud+注册中心eureka+配置中心demo

    在SpringCloud框架中,Eureka是作为服务发现和注册中心的核心组件,而配置中心则用于集中管理和分发应用的配置,使得微服务架构中的各个服务能够动态地获取和更新配置。下面将详细介绍这两个核心概念以及如何在一个...

    spring-cloud-eureka 服务注册及发现实例

    &lt;artifactId&gt;spring-cloud-starter-netflix-eureka-client ``` 接下来,我们需要配置 Eureka 客户端。在 Spring Boot 的 `application.yml` 或 `application.properties` 文件中,设置 Eureka 服务器的地址以及...

    SpringCloud——服务的注册与发现Eureka

    SpringCloud是中国开发者广泛使用的微服务框架之一,其中Eureka是其核心组件,主要负责服务的注册与发现。本文将深入探讨Eureka的工作原理、配置以及如何在实际项目中使用它来构建服务注册中心和实现服务提供者的...

    SpringCloud+eureka+gateway.zip

    本篇将深入探讨SpringCloud中的两个关键组件——Eureka和Gateway,以及如何将它们整合到一起,构建高效、稳定的微服务架构。 一、Eureka:服务注册与发现 Eureka是SpringCloud中的服务注册与发现组件,它允许服务...

    SpringCloud05-EurekaServer学习(单机注册与集群注册)

    在这个SpringCloud05-EurekaServer的学习过程中,你将掌握如何设置和使用EurekaServer,无论是单机模式还是集群模式,这将为你的微服务架构打下坚实的基础。通过尚硅谷官网的视频教程,你将得到更详细的指导和实践...

    springCloud+eureka

    标题 "springCloud+eureka" 提示我们将探讨如何结合 Spring Cloud 和 Eureka 构建微服务架构。 1. **Eureka 的基本概念** - **服务注册**:每个微服务启动时,都会向 Eureka Server 注册自己的信息,包括服务名、...

    springcloud-Netflix-eureka demo 可做参考

    本项目"springcloud-Netflix-eureka demo"提供了一个基于Spring Boot搭建的基础服务框架,旨在帮助开发者理解和学习如何使用Eureka进行服务注册与发现,以及Ribbon客户端负载均衡。 首先,我们来看Eureka。Eureka是...

    Spring Cloud Eureka Server与Client的创建.docx

    配置Spring Boot和Spring Cloud的版本,如示例中的SpringBoot 2.0.0.M3和SpringCloud Finchley.M2。 3. 配置服务器的启动类,通常通过`@EnableEurekaServer`注解启用Eureka Server功能。 - 创建Eureka Client: 1...

    spring-cloud-eureka集群的搭建.zip

    在分布式系统中,服务治理是至关重要的,Spring Cloud Eureka作为一个服务发现组件,帮助企业构建高可用的服务网络。本文将详细讲解如何搭建一个基于Spring Cloud 2.0的Eureka集群,以便实现多个Eureka注册中心的高...

    spring cloud2.0 eureka server spring security配置

    在Spring Cloud 2.0版本中,Eureka Server的配置相比1.x版本确实有了一些显著的变化,尤其是在结合Spring Security进行安全设置时。Spring Cloud Eureka是Netflix Eureka的Spring Boot实现,它为微服务架构提供了...

    spring cloud eureka示例代码

    这通常涉及设置`spring.cloud.netflix.eureka.client.register-with-eureka=true`和`spring.cloud.netflix.eureka.client.fetch-registry=true`,这样服务就会自动注册到Eureka Server,并定期获取服务列表。...

    Springcloud Zuul config eureka ribbon实例

    在本实例中,我们主要探讨的是Spring Cloud框架中的几个关键组件——Zuul、Config、Eureka和Ribbon,这些都是微服务架构中的重要工具。让我们逐一解析这些组件及其作用。 首先,Spring Cloud Config是一个集中式的...

    spring cloud之Eureka Server搭建

    总之,Eureka Server是Spring Cloud微服务架构中的重要组件,它的功能和服务发现机制对于构建分布式系统至关重要。通过以上步骤,你已经掌握了如何快速搭建一个基础的Eureka Server,为进一步学习和实践Spring Cloud...

    SpringCloud案例(仅集成了Eureka)

    在这个案例中,我们专注于SpringCloud的核心组件之一——Eureka,它是服务发现的重要工具。服务发现允许微服务之间找到并互相通信,使得系统具有更好的可扩展性和解耦性。 Eureka是Netflix开发的一个基于REST的服务...

    spring cloud eureka 注册中心客户端

    - `@Autowired` 注解的`EurekaClient`接口,可以用来获取服务实例信息。 - `InstanceInfo`对象:包含了服务实例的详细信息,如ID、状态、端口等。 6. **健康检查与自我保护模式**: Eureka客户端有健康检查机制...

    springcloud eureka服务注册中心 最新版本2.x.x

    SpringCloud Eureka是微服务架构中的关键组件,它作为一个服务注册与发现的工具,使得服务之间的调用变得简单。在最新版本2.x.x中,Eureka提供了更稳定、高效的特性来支持大规模分布式系统的构建。 首先,让我们...

Global site tag (gtag.js) - Google Analytics