Eureka 入门教程

Eureka 介绍
1. 注册中心概述

什么是注册中心?

给客户端提供可供调用的服务列表,客户端在进行远程调用(RPC)时,根据服务列表选择服务提供方的服务地址进行服务调用

注册中心的核心功能

  • 注册:服务提供者上报服务的描述信息
  • 发现:消费者根据服务名称获取对应的服务描述信息
  • 服务健康检测/探活机制:主要目的是更新注册表中的服务列表

业界常用的注册中心有如下几种

Zookeeper(Java)、etcd(Go)、Consul(Go)、Eureka(Java)、Nacos(Java)

2. Eureka基础概念

        Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运 行在 AWS(Amazon Web Services,亚马逊网络服务,亚马逊云)域中的中间层服务,以达到 负载均衡和中间层服务故障转移的目的。SpringCloud 将它集成在其子项目 spring-cloud-netflix 中,实现 SpringCloud 的服务发现功能。其实,Eureka 就是一个专门用于服务发现的服务器,一些服务注册到该服务器,而另一 些服务通过该服务器查找其所要调用执行的服务。可以充当服务发现服务器的组件很多,例 如 Zookeeper、Consul 等。

Eureka的体系架构

image-20201225174716107.png

3 CAP定理
  • 概念

    CAP 定理指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、 Partition tolerance(分区容错性),三者不可兼得。

    • 一致性(C):分布式系统中多个主机之间是否能够保持数据一致的特性。即,当系统数据发生更新操作后,各个主机中的数据仍然处于一致的状态。

    • 可用性(A):系统提供的服务必须一直处于可用的状态,即对于用户的每一个请求,系 统总是可以在有限的时间内对用户做出响应。

    • 分区容错性(P):分布式系统在遇到任何网络分区故障时,仍能够保证对外提供满足一

      致性和可用性的服务。

  • 定理

    CAP 定理的内容是:对于分布式系统,网络环境相对是不可控的,出现网络分区是不可 避免的,因此系统必须具备分区容错性。但系统不能同时保证一致性与可用性。即要么 CP, 要么 AP。

4. Eureka异地多活

        Eureaka中的Region和Avaliablity Zone概念是云计算的概念,为了方便不同地理区域中用户的使用,大型云服务提供商一般会根据用户需求量在不同的城市、省份、国家或者洲创建不同的大型云计算机房。这些不同区域机房房间一般是不能"内网联通"的,这些区域就是一个Region

        这里存在一个问题,同一个Region机房是如何实现同域容灾的?位了增强容灾能力,在一个Region中又设置了不同的Avaliablity Zone,这些AZ间实现了内网联通,且用户可以根据自己的具体位置自动选择同域中的不同AZ,当用户所要访问的AZ出现问题后,系统会自动切换到其他可用的AZ

Eureka 简单使用

Eureka 分为了客户端和服务端,下面分别介绍sever和client的简单使用和配置

eureka-server

加入依赖

<dependency>
       <groupId>org.springframework.cloud</groupId>
       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

标注EurekaServer 

@EnableEurekaServer //表示是EureakaServer
@SpringBootApplication
public class EurekaServer01Application {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer01Application.class, args);
    }
}

简单配置 

eureka:
  instance:
    #指定Eureka主机 localhost 表示本机
    hostname: localhost
  client:
    #是否注册到Eurka Server中 在这里表示是否需要自己注册自己
    register-with-eureka: true
    service-url:
      #注册中心EurekaSever的地址,如果是集群的话,可以在defaulZone 配置为集群中其他的机器,多个的话 用“,”隔开
      defaultZone: http://localhost:18081/eureka/ 

启动访问

http://localhost:18081 

 eureka-client

加入依赖

<dependency>
  <groupId>org.springframework.cloud</groupId>
  <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>

简单配置

eureka:
  instance:
    hostname: localhost
  client:
    service-url:
      defaultZone: http://localhost:18081/eureka/

启动访问

http://localhost:18081

 

### Eureka 服务发现与微服务架构 Eureka 是 Netflix 开源的服务注册与发现框架,专为微服务架构设计。它通过客户端-服务器模式实现服务的注册与发现,使得微服务之间可以高效地进行通信与协作。Eureka 的核心组件包括 Eureka Server 和 Eureka Client,它们共同构成了服务注册与发现的基础。 #### Eureka Server 的作用 Eureka Server 是服务注册中心的核心,负责存储所有注册服务的元数据,并提供服务查询的接口。当微服务启动时,会将自身的配置信息(如主机名、端口、健康状态等)注册到 Eureka Server 中。Eureka Server 维护了一个可用服务列表,存储了所有注册的服务信息,这些信息可以通过 Eureka Server 的管理界面直观查看[^3]。此外,Eureka Server 还支持高可用配置,确保在分布式环境中服务注册与发现的可靠性[^2]。 #### Eureka Client 的功能 每个微服务实例作为 Eureka Client 与 Eureka Server 交互,负责将自身的信息注册到 Eureka Server,并定期发送“心跳”以维持注册状态。这种机制确保了服务的实时可用性,避免了因服务宕机或网络问题导致的通信失败。如果 Eureka Server 在一定时间内未收到某个服务的心跳,它会将该服务从可用服务列表中移除,确保服务消费者始终获取到最新的服务实例信息[^1]。 #### 服务注册与发现的流程 1. **搭建 Eureka Server**:首先需要搭建 Eureka Server 服务,作为服务注册与发现的中心节点。 2. **注册服务提供者**:将服务提供者(如 user-service)注册到 Eureka Server 中,使其成为可发现的服务。 3. **注册服务消费者**:服务消费者(如 order-service)同样需要注册到 Eureka Server 中。 4. **服务拉取与调用**:服务消费者通过 Eureka Server 获取可用服务列表,并通过负载均衡选择一个服务实例进行远程调用[^4]。 #### Eureka 的优势 - **灵活性**:Eureka 支持多种部署方式,既可以单节点部署,也可以通过集群实现高可用性。 - **可扩展性**:随着微服务数量的增加,Eureka 能够轻松扩展以支持更多的服务实例。 - **可靠性**:通过心跳机制和自动剔除不可用服务,Eureka 确保了服务发现的可靠性。 #### 示例代码:搭建 Eureka Server 以下是一个简单的 Spring Boot 项目示例,展示如何搭建 Eureka Server: ```java // EurekaServerApplication.java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @SpringBootApplication @EnableEurekaServer public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } } ``` 在 `application.yml` 中配置 Eureka Server: ```yaml server: port: 8761 eureka: instance: hostname: localhost client: registerWithEureka: false fetchRegistry: false serviceUrl: defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/ ``` #### 服务消费者如何调用服务 服务消费者通过 Eureka Server 获取服务提供者的地址列表,并结合负载均衡策略(如 Ribbon 或 LoadBalancer)选择一个服务实例进行调用。以下是一个使用 RestTemplate 的示例: ```java // OrderServiceApplication.java import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.client.discovery.EnableDiscoveryClient; import org.springframework.context.annotation.Bean; import org.springframework.web.client.RestTemplate; @SpringBootApplication @EnableDiscoveryClient public class OrderServiceApplication { public static void main(String[] args) { SpringApplication.run(OrderServiceApplication.class, args); } @Bean public RestTemplate restTemplate() { return new RestTemplate(); } } ``` 在调用服务提供者时,可以通过服务名称进行访问: ```java // OrderController.java import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; @RestController public class OrderController { private final RestTemplate restTemplate; public OrderController(RestTemplate restTemplate) { this.restTemplate = restTemplate; } @GetMapping("/order") public String getOrder() { String serviceUrl = "http://user-service/user"; return restTemplate.getForObject(serviceUrl, String.class); } } ``` ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hefeng_aspnet

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值