一、EUREKA
Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
Eureka包含两个组件:Eureka Server和Eureka Client。
Eureka Server提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、健康检查 、负载均衡、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。
二、实战
2.1 eureka server
打开idea编辑器->File->NEW->project
next
每个服务的springboot的版本保持一致,这里使用的是2.2.0
修改配置文件:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
register-with-eureka: false #设为false,不会注册自己
spring:
application:
name: eureka
server:
port: 8761
在启动类上添加@EnableEurekaServer注解
启动,界面如下
也可以打成jar包方便每次启动;
命令:mvn clean package -Dmaven.test.skip=true
再用java -jar eureka-0.0.1-SNAPSHOT.jar 启动
2.2 eureka client
前面步骤用server相同,选择依赖不同如下:
在启动类中添加注解:
配置文件
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/
# instance:
# hostname: clientName 点击客户端出来的别名
spring:
application:
name: client
server:
port: 8080
2.3eureka的高可用配置
如上图:假设起了三台server ,server与server之间两两注册,客户端注册在三台server上
配置文件如下:假设端口8761、8762、8763
eureka:
client:
service-url:
defaultZone: http://localhost:8762/eureka/,http://localhost:8763/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
server:
port: 8761
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8763/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
server:
port: 8762
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/
register-with-eureka: false
server:
enable-self-preservation: false
spring:
application:
name: eureka
server:
port: 8763
客户端配置:
eureka:
client:
service-url:
defaultZone: http://localhost:8761/eureka/,http://localhost:8762/eureka/,http://localhost:8763/eureka/
# instance:
# hostname: clientName 别名
spring:
application:
name: client
server:
port: 8080
任一serve挂了不影响,其他服务端、客户端
问题1:eureka页面提示
这个是客户端服务上线率太低导致服务端不知道客户端到底是上线还是下线,所以默认客户端还在线,在实际开发中可能影响开发,可以在服务端加配置去除该提示;但仅限于开发环境,生产环境一定要打开这个提示
server:
enable-self-preservation:false
问题2:SpringCloud客户端Client启动无报错自动停止
解决方法:
在pom.xml中加入
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
即可
参考文献:https://baike.baidu.com/item/Eureka/22402835?fr=aladdin