文章目录
一、基本概念
1.1 是什么
Eurake是Netiflix的一个子模块,也是核心模块之一,Eurake是一个基于Rest的服务,用于定位服务,以实现云端中间层服务发现和故障转移,服务注册与发现对于微服务架构来说是非常重要的,有了服务发现与注册,只需要使用服务的标识符,就可以访问到服务,而不需要修改服务调用的配置文件了,功能类似于dubbo的注册中心,比如Zookeeper。
1.2 基本架构
C-S架构,Eurake Server作为服务注册功能的服务器,他是服务注册的中心。而系统中的其他微服务,使用Euraka的客户端链接到Euraka Server并维持心跳连接,这样系统的维护人员就可以通过Euraka Server来检控系统中各个微服务是否正常运行,SpringCloud的一些其他模块(比如Zuul)就可以通过Eurake Server来发现系统中的其他微服务,并执行相关的逻辑。
-
Eureka提供服务注册与发现功能
各个节点启动之后会在EurekaServer中进行注册,EurekaServer中的服务注册表中将会存储所有可用的服务节点的信息,服务节点的信息会在界面中直观的看到。 -
EurekaClient是一个java客户端,用于简化Eureka Server的交互,客户段同时也具备一个内置的,还用轮询(round-robin)负载算法的负载均衡器,在应用启动后,将会向Eureka Server发送心跳,如果Eureka在多个心跳周期内没有接收到某个节点的心跳,则会在注册中心服务中把这个服务节点移除。
1.3 三大角色
- Eureka Sercer提供服务注册与发现
- Server Povider服务提供方将自身的服务注册到Eureka,从而使服务消费方能够找到
- Sevver Consumer服务消费方从Eureka获取服务注册的列表,从而能够消费服务。
二、Eureka Server搭建
2.1 依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
2.2 配置文件
server:
port: 7002
eureka:
instance:
#Eureka服务段的实例名称
hostname: localhost
client:
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#不向自己注册自己
register-with-eureka: false
#表示自己就是注册中心,我的职责就是维护服务实例,帮不需要去检索服务,也就是提供的服务列表中不能有自己
fetch-registry: false
2.3 主启动类上面,标注对应的注解
@SpringBootApplication
@EnableEurekaServer//EurekaServer服务端启动类,接受其他微服务的注册
public class StudentApplication {
public static void main(String[] args) {
SpringApplication.run(StudentApplication.class, args);
}
}
2.4 成功启动的页面
2.5 完整依赖
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Rubbish</groupId>
<artifactId>rubbish-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.Rubbish</groupId>
<artifactId>rubbish-eureka</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rubbish-eureka</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>
</project>
三、Eureka Clent搭建
3.1 依赖
- Eureka Client端需要添加的依赖
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-starter-config -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
<version>2.1.4.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
<version>1.4.4.RELEASE</version>
</dependency>
3.2 配置文件
#客户端入住进eureka服务列表内
eureka.client.service-url.defaltZone=http://localhost:7002/eureka
3.3 主启动类需要添加相应的标识
@SpringBootApplication
@EnableEurekaClient
public class DemoApplication {
public static void main(String[] args) {
SpringApplication.run(DemoApplication.class, args);
}
}
3.1 将已经存在的微服务注册进Eureka
3.2 报错
* 原因:自己配的pom有很大的问题,老老实实的点IDEA提供的环境,不要自己去配置环境!!!!
3.3 参考
spring boot 2.0.3+spring cloud (Finchley)1、搭建服务注册和发现组件Eureka 以及构建高可用Eureka Server集群
3.4 版本对照关系
3.5 整体pom参考
<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Rubbish</groupId>
<artifactId>rubbish-parent</artifactId>
<version>0.0.1-SNAPSHOT</version>
<relativePath/> <!-- lookup parent from repository -->
</parent>
<groupId>com.Rubbish</groupId>
<artifactId>rubbish-service</artifactId>
<version>0.0.1-SNAPSHOT</version>
<name>rubbish-service</name>
<description>Demo project for Spring Boot</description>
<properties>
<java.version>1.8</java.version>
<spring-cloud.version>Hoxton.SR1</spring-cloud.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-config-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-config</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
<version>2.2.1.RELEASE</version>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
<exclusions>
<exclusion>
<groupId>org.junit.vintage</groupId>
<artifactId>junit-vintage-engine</artifactId>
</exclusion>
</exclusions>
</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>