Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。

1、Eureka组件


Eureka包含两个组件:Eureka Server Eureka Client

1.1 Eureka Server


Eureka Server是作为服务的注册与发现中心,提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样Eureka Server中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Server本身也是一个服务,默认情况下会自动注册到Eureka注册中心。
如果搭建单机版的Eureka Server注册中心,则需要配置取消Eureka Server的自动注册逻辑。毕竟当前服务注册到当前服务代表的注册中心中是一个说不通的逻辑。
Eureka Server通过Register、Get、Renew等接口提供服务的注册、发现和心跳检测等服务。

1.2 Eureka Client


Eureka Client既可以作为服务的生产者,又可以作为服务的消费者,是一个java客户端,用于简化与Eureka Server的交互,客户端同时也具备一个内置的、使用轮询(round-robin)负载算法的负载均衡器。在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Client分为两个角色,分别是:Application Service(Service Provider)和Application Client(Service Consumer)
1.2.1 Application Service
服务提供方,是注册到Eureka Server中的服务。
1.2.2 Application Client
服务消费方,通过Eureka Server发现服务,并消费。

2.实现原理


Eureka是spring cloud中的一个负责服务注册与发现的组件。遵循着CAP理论中的A(可用性)P(分区容错性)。
CAP原则又称CAP定理,指的是在一个分布式系统中,Consistency(数据一致性)、 Availability(服务可用性)、Partition tolerance(分区容错性),三者不可兼得。CAP由Eric Brewer在2000年PODC会议上提出。该猜想在提出两年后被证明成立,成为我们熟知的CAP定理。
Eureka和ZooKeeper的特性
image.png
EureKa在Spring Cloud全家桶中担任着服务的注册与发现的落地实现。Netflix在设计EureKa时遵循着AP原则,它基于R
EST的服务,用于定位服务,以实现云端中间层服务发现和故障转移,功能类似于Dubbo的注册中心Zookeeper。具体结构如下图:
image.png

3.上手使用

1.在你的项目下面建一个eureka_service的服务
2.在你的eureka_service(注册中心)的pom.xml中导入service端依赖

  1. <!--eureka-server服务端 -->
  2. <dependency>
  3. <groupId>org.springframework.cloud</groupId>
  4. <artifactId>spring-cloud-starter-eureka-server</artifactId>
  5. </dependency>

3.然后再你的application.yml中配置service端

server:
  port: 10001 # 服务端口
---
spring:
  application:
    name: eurekaServer # eureka服务名称
---
eureka:
  client:
    service-url:
     defaultZone: http://localhost:10001/eureka # eureka的地址信息

4.再你Eureka的启动类里面加上注解@EnableEurekaServer

@EnableEurekaServer
@SpringBootApplication
public class EurekaApplication {
    public static void main(String[] args) {
        SpringApplication.run(EurekaApplication.class, args);
    }
}

5.然后你在的消费端的pom.xml中加上client端依赖

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

6.在你的消费端的application.yml中备注注册

spring:
 application:
    name: orderServer
---
eureka:
  client:
    service-url:
      defaultZone: http://localhost:10001/eureka #这里是你刚刚在eurke_service里面配置的那段

7.再你Eureka的启动类里面加上注解@EnableEurekaClient

@SpringBootApplication
@EnableEurekaClient
public class OrderApplication {

    public static void main(String[] args) {
        SpringApplication.run(OrderApplication.class, args);
    }
    @Bean
    @LoadBalanced
    public RestTemplate restTemplate() {
        return new RestTemplate();
    }
}

8.运行如下图就证明你成功了我们启动配置的两个服务
image.png