eureka包含2个组件,分别为eureka Server和eureka Client
1)、eureka Server:提供服务发现的能力,各个微服务启动时,会向eureka Server注册自己的信息(如IP、端口、微服务名称等)。
eureka Server会存储这些信息。
2)、eureka Client:是一个java客户端,用户简化eureka server的交互
3)、微服务启动后,会周期性(默认30秒)的向eureka server发送心跳以续约自己的租期
4)、如果eureka server在一定时间内没有接收到某个微服务实例的心跳,eureka Server将会注销该实例(默认90秒)
5)、eureka client会缓存服务注册中的信息,这种方式有一定的优势
首先微服务无需每次请求查询eureka server,从而降低eureka server的压力
其次即使eureka server所有节点都宕机,服务消费者依然可以使用缓存中的信息找到服务提供者并完成调用
6)、默认情况下,eureka server同时也是eureka client,多个eureka server实例,相互之间通过复制方式来实现服务注册表中的数据的同步。
2、如何创建eureka?
第一步:创建一个maven主工程
第二步:在maven主工程下创建2个model工程
一个model工程作为服务注册中心,即Eureka Server
另一个作为eureka Client
右键工程à创建modelà选择spring initialir,如下图:
下一步à选择cloud discoveryàeureka server,然后一直下一步即可
第三步、pom.xml中依赖如下:
<?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">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.1.3.RELEASE</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.example</groupId>
<artifactId>eureka-server</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>eureka-server</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Greenwich.SR1</spring-cloud.version>
</properties>
<dependencies>
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
<version>1.3.0.RELEASE</version>
</dependency>
<!-- spring boot test-->
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
<dependencyManagement>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>${spring-cloud.version}</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
第四步、启动一个服务注册中心
启动一个服务注册中心,只需要一个注解@EnableEurekaServer,这个注解添加到springboot工程启动application类上
package com.example.eurekaserver;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@EnableEurekaServer //启动一个服务注册中心,只需要该注解即可
@SpringBootApplication
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
第五步:配置application.yml
server:
port: 8761
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false
fetch-registry: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
注:eureka是一个高可用的组件,它没有后端缓存,每个实例注册之后需要向注册中心发送心跳(因此可以在内存中完成)。在默认情况下,eureka server也是一个eureka client,必须要指定一个server.通过eureka.clinet.registerWithEureka:false和fetchRegistry:false来表明自己是一个eureka server。
第六步、启动工程,并测试
Eureka server是有界面的,启动工程,打开浏览器访问,http://localhost:8761,界面如下:
注:no application available没有服务被发现,因为没有注册服务当然是没有服务被发现了。