什么是Eureka?
Eureka是 Netflix的一个子模块,也是核心模块之一,遵循AP原则(在分布式系统领域有个著名的CAP定理,C-数据一致性;A-服务可用性;P-服务对网络分区故障的容错性,这三个特性在任何分布式系统中不能同时满足,最多同时满足两个)。它是一个基于REST的服务,用于定位服务,以实现云端中间层服务发现和故障转移。服务注册与发现对于微服务来说非常重要的,有了服务注册与发现只需使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件,功能类似于Dubbo的注册中心,比如Zookeeper。
Eureka的架构
Eureka采用了C-S的架构,EurekaServer作为服务注册功能的服务器,是服务注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Server并维持心跳连接。这样系统的维护人员就能通过EurekaServer来监控系统中各个微服务是否正常运行,SpringCloud的一些其他模块(比如Zuul)就可以通过EureServer来发现系统中的其他服务,并执行相关的逻辑。
Eureka包括两个组件:Eureka Server 和Eureka Client
- server提供服务注册服务,各个结点启动后,会再EurekaService中进行注册,这样Server中的服务注册表中将会存储所有可用服务结点的信息,服务结点的信息可以在界面中直观的看到。
- Client是一个java客户端,用户简化EurekaServer的交互,客户端同时也具备一个内置的,使用轮询负载算法的负载均衡器。在启动后,将会向Server发送心跳(默认周期为30秒)。如果Server在多个心跳周期没有接受到某个节点的心跳,Server将会从服务注册表中把这个服务节点移除掉(默认周期为90秒)。(这里的又称Eureka的自我保护机制,下面会具体详解)
Eureka的初步配置认识
我们在之前的项目基础上(SpringCloud-REST实现生产者与消费者的通信服务),再创建一个模块(其实关系不大,只是前面有SpringCloud项目的初始化)。并导入依赖,Eureka的话,我们只需要导入Eureka的的依赖就行,这里我们一步一步来,我们先导入Eureka的server依赖
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<parent>
<artifactId>springcloud</artifactId>
<groupId>com.lin</groupId>
<version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>eureka</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.4.6.RELEASE</version>
</dependency>
</dependencies>
</project>
导入依赖之后就是配置文件了,我们创建application.yml,然后进行配置
server:
port: 7001
#Eureka配置
eureka:
instance:
hostname: localhost #服务端的实例名称
client:
register-with-eureka: false #表示是否向服务中心注册自己
fetch-registry: true #为false的话,表示自己为注册中心
service-url: #与服务中心进行交互的一个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
这里的与服务中心交互地址我们是有默认的,如果没有的话就是源码默认的地址
然后就是创建我们的主启动类
package com.lin.springcloud;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer //服务端的启动类
public class eureka_7001 {
public static void main(String[] args) {
SpringApplication.run(eureka_7001.class,args);
}
}
访问7001端口就能看到我们Eureka的页面。
接下来呢就是注册服务进来,可以看我的下一篇博客。