一、Eureka
这是我参与「掘金日新计划 · 6 月更文挑战」的第21天 ,点击查看活动详情
\
基本概念
Eureka是Netflix开发的服务发现框架,SpringCloud将它集成在自己的子项目 spring-cloud-netflix中,实现SpringCloud的服务发现功能。Eureka包含两个组件:
-
Eureka Server\
-
Eureka Client\
Eureka Server提供服务注册服务:
-
各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。\
-
多个Eureka Server之间通过复制的方式,来实现服务注册表数据的同步。\
Eureka Client是一个java客户端:
- 客户端同时也包含一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
- 在应用启动后,将会 向Eureka Server发送心跳维持自己的注册状态,默认周期为30秒,如果Eureka Server在多个心跳周期内没有 接收到某个节点的心跳,Eureka Server将会从服务注册表中注销该实例,把这个服务节点移除,默认周期为90 秒。
server端配置
# 每间隔30s,向服务端发送一次心跳,证明自己依然”存活“
eureka.instance.lease-renewal-interval-in-seconds=30
#告诉服务端,如果我90s之内没有给你发心跳,就代表我“死”了,将我踢出掉
eureka.instance.lease-expiration-duration-in-seconds=90
client端配置
- Eureka Client 会缓存服务注册表中的信息,所以 Eureka Client 无须每次调用微服务都要先查询Eureka Server,能有效地缓解Eureka Server的压力,而且即使所有的Eureka Server节点都宕掉,Client 依然可以根据缓存中信息找到服务提供者。\
#从注册中心获取注册信息,默认true
eureka.client.fetchRegistry=true
# 从注册中心获取注册信息的时间间隔,默认30s
eureka.client.registryFetchIntervalSeconds=30
综上,Eureka通过心跳检查、集群、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。\
\
二、搭建Eureka服务器
1、父工程中定义Spring Cloud的版本
<dependencyManagement>
<dependencies>
<!--Spring Cloud-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.SR2</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
2、创建Eureka服务器模块
创建Maven模块:guli-commonservice-eureka
3、配置pom
<dependencies>
<!--注册中心-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
</dependencies>
4、配置application.properties
#服务端口
server.port=8220
# 服务名
spring.application.name=guli-eureka
# 环境设置:dev、test、prod
spring.profiles.active=dev
#Eureka客户端与Eureka服务端进行通信的地址
eureka.client.service-url.defaultZone=http://192.168.100.100:8220/eureka
#属性表示是否将自己注册到Eureka Server, 默认为true。 由于当前应用就是Eureka Server, 因此设为 false;
# 单节点关闭
eureka.client.register-with-eureka=false
#表示是否从Eureka Server获取注册信息,默认为true。 如果这是一个单点的 Eureka Server,不需要同步其他节点的数据,可以设为false。
# 单节点关闭
eureka.client.fetch-registry=false
5、创建启动类
在启动类上添加注解@EnableEurekaServer
package com.guli.eureka;
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class);
}
}
6、logback.xml
7、启动Eureka注册中心并在浏览器中访问
System Status:系统信息
DS Replicas:服务器副本
Instances currently registered with Eureka:已注册的微服务列表
General Info:一般信息
Instance Info:实例信息
三、服务注册
在edu微服务中完成以下配置\
1、客户端配置pom
配置Eureka客户端的pom依赖
<!--服务注册-->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
2、添加服务配置信息
配置application.properties,在客户端微服务中添加注册Eureka服务的配置信息
#指定注册中心地址
eureka.client.service-url.defaultZone=http://192.168.100.100:8220/eureka/
#eureka服务器上获取的是服务器的ip地址
eureka.instance.prefer-ip-address=true
3、添加Eureka客户端注解(可选)
这是我参与「掘金日新计划 · 6 月更文挑战」的第21天 ,点击查看活动详情 在客户端微服务启动类中添加注解
在启动类使用@EnableDiscoveryClient或者@EnableEurekaClient声明该应用为Eureka Client
@EnableEurekaClient
@EnableDiscoveryClient或者@EnableEurekaClient的区别在于前者是后者的抽象。在Spring Cloud 中,服务发现组件有多种,@EnableDiscoveryClient为各种服务组件提供了支持,而@EnableEurekaClient则只能与Eureka一起工作。在Edgware版本之后,不再需要添加该注解。
4、启动客户端微服务
启动注册中心
启动已注册的微服务,可以在Eureka注册列表中看到被注册的微服务