一、Spring-Cloud Euraka介绍

Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。
Spring Cloud的Eureka官网文档:http://cloud.spring.io/spring-cloud-netflix/single/spring-cloud-netflix.html.

二、Eureka角色

Eureka中分为两个角色:Eureka Server(Eureka服务)和Eureka Client(Eureka客户端)。
无论是服务端还是客户端其本质都是一个Java项目,在Spring Cloud中主要通过启动类上添加@EnableEurekaServer和@EnableEurekaClient(可以省略)来区分当前应用程序是服务端还是客户端。
Eureka Client 可以理解成所有需要注册到Eureka Server中的项目。为什么需要向注册中心中注册呢?因为注册后别人才能通过注册中心获取到项目信息和项目所在服务器信息,通过这些信息调用这个项目。Spring Cloud中每个项目调用的信息都存储在了注册中心中(Eureka)。

注意:在这里,Spring Cloud中没有Provider和Consumer说法。如果A项目访问B项目,称A项目为Application Client,称B项目为Application Service。同时可能存在C访问A的情况,这是C项目是Application Client,A项目是Application Service。发现A项目又是Application Service又是Application Client,主要看针对哪个业务场景。无论是Applicatin Service还是Application Client都是Eureka Client。

三、创建单机Eureka Server

搭建Eureka Server时就相当于在安装Eureka软件(在Spring Cloud学习的一种全新方式,替换了之前需要安装对应软件的问题)。

2.1 创建项目这里勾选后会自动导入Eureka Server依赖

添加Spring Boot 依赖和Spring Cloud集成的Eureka Server依赖。

 <parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version></parent><dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR3</version><type>pom</type><scope>import</scope></dependency></dependencies></dependencyManagement><dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency></dependencies>

2.2 application.yml配置

eureka:client:# 因为当前项目为服务,不需要向服务注册自己,默认为trueregister-with-eureka: false# 因为当前为非集群版eureka,所以不需要同步其他节点数据fetch-registry: false
# 当server.port配置不是8761时需要配置内容
#    service-url:
#      defaultZone: http://localhost:${server.port}/eureka/
server:port: 8761

2.3 启动类中添加@EnableEurekaServe注解配置

2.4 访问

浏览器中输入:http://localhost:8761/.

四、创建Eureka Client

4.1 pom.xml

参考servicer配置文件额外添加Spring Boot 依赖和Spring Cloud集成的Eureka Client依赖。

    <dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-netflix-eureka-client</artifactId></dependency>

4.2 编写配置文件

在配置文件中添加配置。
1.此处端口就是为了和其他项目不冲突而定的一个端口。
2.spring.application.name为注册到eureka server后的名字。名字中不能使用下划线,否则可能出现无法注册的问题。
3.如果Eureka Server配置的Server.port不是8761需要打开下面的注释,并且把url中端口号改成Eureka server中defaultZone配置的端口号。如果Eureka Server的端口是8761,注释部分就可以省略。

# 此处应该定义名称,否则注册到Server后的名字为UNKNOWN
spring:application:name: eureka-client
#eureka:
#  client:
#    serviceUrl:
#      defaultZone: http://localhost:8761/eureka/

4.3 启动类

启动类上的注解@EnableEurekaClient是可以省略的

4.4 观察结果

通过Eureka Server的可视化界面观察Eureka Client是否注册成功。如果注册成功会在页面中显示注册的client信息。

Application: 配置文件中定义的应用程序名称
Status:UP表示正在执行,smallming客户端所在服务器的主机名,eureka-client定义应用程序名称,如果是8080端口省略,如果不是会显示在后面

五、Eureka集群实现原理

5.1官方原理图

5.2 解释说明

所有Eureka Server 通过Replicate进行数据同步。无论Eureka Client向哪个Eureka Server中注册信息,最终所有Eureka Server中都会存储注册的信息,这些信息都缓存到Eureka Server的本地。每个Eureka Server中同步后的数据都是完全相同的。
Eureka Client向Eureka Server注册信息的时候我们称它为Application Service,当获取注册的信息时称为Application Client,由于可能出现某个Eureka Client即需要注册服务,又需要获取其他服务,所以很多Eureka Client既是Application Service 又是Application Client。
Eureka Client启动后,每隔30秒向Eureka Server发送一次心跳,证明自己的可用,可通过以下配置修改心跳的间隔时间。

eureka.instance.lease-renewal-interval-in-seconds=30

当Eureka Server超过90秒没有收到提供者的心跳后,会认为这个提供者已经宕机,销毁实例。可以通过以下配置修改时间。

eureka.instance.lease-expiration-duration-in-seconds=90

如果重新启动Eureka Server,会销毁所有实例。

5.3 自我保护机制

Eureka中有一种自我保护机制。当15分钟内超过85%的Eureka Client都没有正常的心跳包时,Eureka认为Server和Client之间出现了网络问题。这个时候将不在因为没有收到心跳而销毁实例。Eureka Client依然可以访问Server,但是Server不会把内容同步到其他Server中。当网络稳定后,Server会把注册的信息同步到其他Server中。
在Eureka中自我保护机制默认为开启的:

eureka.server.enable-self-preservation=true Boolean

关闭自我保护

eureka:server:# 关闭自我保护enable-self-preservation: false# 扫描失效服务的时间间隔eviction-interval-timer-in-ms: 10000

六、Eureka高可用集群搭建

6.1 编写一个项目通过不同的配置文件加载不同参数。

最后把集群部署到服务器上。集群设定有两个Eureka Server,每个Eureka Server安装到不同的服务器上。

<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.2.5.RELEASE</version>
</parent>
<dependencyManagement><dependencies><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-dependencies</artifactId><version>Hoxton.SR3</version><type>pom</type><scope>import</scope></dependency></dependencies>
</dependencyManagement>
<dependencies><dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-web</artifactId></dependency><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-netflix-eureka-server</artifactId></dependency>
</dependencies>
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

6.2 创建配置文件

Eureka集群可以使用Spring Boot多配置文件实现。集群中创建几个Eureka Server就编写几个配置文件。

application-cluster1.yml

spring:application:name: eureka1
server:port: 8761
eureka:instance:# 和配置文件的application-xxx.yml相同hostname: eurekacluster1client:service-url:defaultZone: http://eurekacluster2:8761/eureka/

application-cluster2.yml

spring:application:name: eureka2
server:port: 8761
eureka:instance:# 和配置文件的application-xxx.yml相同hostname: eurekacluster2client:service-url:defaultZone: http://eurekacluster1:8761/eureka/

6.3 主启动类添加@EnableEurekaServer注解

6.4 mvn插件打包

6.5 jar包上传linux

[root@base ~]# mkdir -p /usr/local/eurekacluster
[root@base ~]# cd /usr/local/eurekacluster/
#这里使用工具上传
[root@base eurekacluster]# ls
eureka_cluster-0.0.1-SNAPSHOT.jar
[root@base eurekacluster]# mv eureka_cluster-0.0.1-SNAPSHOT.jar eurekacluster.jar
[root@base eurekacluster]# ls
eurekacluster.jar

6.6配置域名解析

修改Linux服务器中/etc/hosts文件。每行前面的ip是jar所在服务器的ip,后面的名称是项目中配置文件配置的hostname值

6.7 使用命令运行

前提要有jdk,jdk环境变量参考如下

使用命令运行java -jar -Dspring.profiles.active=配置文件变量名 打包后jar包名称

java -jar -Dspring.profiles.active=eurekacluster1 eurekacluster.jar


如果角色每次编写命令不方便,可以编写SHELL脚本文件。在jar包所在文件夹中新建startup.sh文件。编写内容后授权。

#!/bin/bashcd `dirname $0`CUR_SHELL_DIR=`pwd`
CUR_SHELL_NAME=`basename ${BASH_SOURCE}`JAR_NAME="项目jar包名称"
JAR_PATH=$CUR_SHELL_DIR/$JAR_NAME#JAVA_MEM_OPTS=" -server -Xms1024m -Xmx1024m -XX:PermSize=128m"
JAVA_MEM_OPTS=""SPRING_PROFILES_ACTIV="-Dspring.profiles.active=配置文件变量名称"
#SPRING_PROFILES_ACTIV=""
LOG_DIR=$CUR_SHELL_DIR/logs
LOG_PATH=$LOG_DIR/eureka-server.logecho_help()
{echo -e "syntax: sh $CUR_SHELL_NAME start|stop"
}if [ -z $1 ];thenecho_helpexit 1
fiif [ ! -d "$LOG_DIR" ];thenmkdir "$LOG_DIR"
fiif [ ! -f "$LOG_PATH" ];thentouch "$LOG_DIR"
fiif [ "$1" == "start" ];then# check serverPIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`if [ -n "$PIDS" ]; thenecho -e "ERROR: The $JAR_NAME already started and the PID is ${PIDS}."exit 1fiecho "Starting the $JAR_NAME..."# startnohup java $JAVA_MEM_OPTS -jar $SPRING_PROFILES_ACTIV $JAR_PATH >> $LOG_PATH 2>&1 &COUNT=0while [ $COUNT -lt 1 ]; dosleep 1COUNT=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}' | wc -l`if [ $COUNT -gt 0 ]; thenbreakfidonePIDS=`ps  --no-heading -C java -f --width 1000 | grep "$JAR_NAME" | awk '{print $2}'`echo "${JAR_NAME} Started and the PID is ${PIDS}."echo "You can check the log file in ${LOG_PATH} for details."elif [ "$1" == "stop" ];thenPIDS=`ps --no-heading -C java -f --width 1000 | grep $JAR_NAME | awk '{print $2}'`if [ -z "$PIDS" ]; thenecho "ERROR:The $JAR_NAME does not started!"exit 1fiecho -e "Stopping the $JAR_NAME..."for PID in $PIDS; dokill $PID > /dev/null 2>&1doneCOUNT=0while [ $COUNT -lt 1 ]; dosleep 1COUNT=1for PID in $PIDS ; doPID_EXIST=`ps --no-heading -p $PID`if [ -n "$PID_EXIST" ]; thenCOUNT=0breakfidonedoneecho -e "${JAR_NAME} Stopped and the PID is ${PIDS}."
elseecho_helpexit 1
fi

更改jar包和配置文件

执行a+x授权执行

7.8 结果检查

查看日志

[root@base eurekacluster]# tail -f /usr/local/eurekacluster/logs/eureka-server.log

7.9 因为这里不是真实的域名所以不能通过域名直接访问,但是可以通设置ip映射后实现域名访问的效果,入下图


更改hosts文件权限不够


再次访问

客户端测试

eureka:client:serviceUrl:defaultZone: http://eurekacluster1:8761//eureka/,http://eurekacluster2:8761//eureka/


启动客户端观察eureka集群

七、Eureka优雅关机

注意:Actuator和Eureka没有任何关系。放在这除了实现Eureka关机的效果以外,更重要是给同学们讲解Actuator的用法。
可以借助Spring Boot提供的Actuator(监视器,监控中心)实现Eureka的优雅关机。
Spring Cloud 基于Spring Boot,Actuator关闭Spring Boot项目,SpringBoot项目都关闭了,Eureka Server项目也关闭了。
spring-cloud-starter-netflix-eureka-server默认依赖了Actuator,就不需要导入额外包。正常是需要导入
eureka服务器增加依赖

 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-actuator</artifactId></dependency>

在配置文件中开启shutdown功能

management:endpoints:# 所有功能默认开启enabled-by-default: true# 显示所有已启用功能web:exposure:include: '*'

Actuator中所有功能只提供了post方式方式。
使用postman发送POST请求http://localhost:8761/actuator/shutdown.

再观察控制台已经关闭了

注册中心Eureka的使用相关推荐

  1. springCloud的注册中心Eureka和Zookeper的区别

    1.Eureka 简介: Eureka 是 Netflix 出品的用于实现服务注册和发现的工具. Spring Cloud 集成了 Eureka,并提供了开箱即用的支持.其中, Eureka 又可细分 ...

  2. Srpingcloud之eureka,微服架构之注册中心eureka

    微服架构为什么需要注册中心,它解决了什么问题? 为什么要用? 管理服务以及服务之间的依赖关系. eureka:微服服务注册与发现,负载均衡,故障转移的能力. 类似服务:zookeeper+dubbo ...

  3. SpringCloud系列(一)、服务注册中心Eureka基础

    启动Eureka服务注册中心 1.微服务的注册中心 1.1.注册中心的主要作用 1.2.常见的注册中心 1.3.常见注册中心的异同点 2.Eureka概述 2.1.Eureka的基础知识 2.2.Eu ...

  4. SpringCloud | 第二章: 注册中心 Eureka

    前言 前一章节 初识SpringCloud 简单介绍了什么是SpringCloud,以及微服务的架构,这一章节则来说说SpringCloud的基石,注册中心Eureka. 背景介绍 Eureka是Ne ...

  5. SpringCloud简介及注册中心Eureka

    一.SpringCloud简介 1.简介 Spring Cloud是一系列框架的有序集合.它利用Spring Boot的开发便利性巧妙地简化了分布式系统基 础设施的开发,如服务发现注册.配置中心.消息 ...

  6. eureka java_SpringCloud注册中心Eureka

    本篇概论 在上一篇中我们介绍了微服务相关的内容.微服务的本质就是让服务与服务之间进行互相调用.那么在调用之前需要有一个前提.就是不同的服务与服务之间怎么知道彼此的存在的呢?因为服务都是独立部署的,根本 ...

  7. Spring Cloud(二): 注册中心Eureka的使用

    Eureka 按照官方介绍: Eureka is a REST (Representational State Transfer) based service that is primarily us ...

  8. eureka多台注册中心_微服务实战系列(五)-注册中心Eureka与nacos区别

    1. 场景描述 nacos最近用的比较多,介绍下nacos及部署吧,刚看了下以前写过类似的,不过没写如何部署及与eureka区别,只展示了效果,补补吧. 2.解决方案 2.1 nacos与eureka ...

  9. JAVA Spring Cloud 注册中心 Eureka 相关配置

    转载至  https://www.cnblogs.com/fangfuhai/p/7070325.html Eureka客户端配置       1.RegistryFetchIntervalSecon ...

  10. spring cloud 2.3.x 注册中心eureka 配置

    添加Eureka依赖配置 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=&quo ...

最新文章

  1. 【iCore3 双核心板_FPGA】例程十二:Modelsim仿真实验
  2. Linux中SDIO命令,Linux MMC/SD/SDIO体系结构
  3. 如何在Linux桌面环境下自动启动程序?
  4. antd 使用upload 组件,使用自定义上传行为,覆盖默认action 访问请求
  5. xcap发包工具的简单使用3(报文描述)
  6. Matlab GUI设计——文件读取和保存uigetfile,uiputfile
  7. 最近抖音超火的60帧高清视频制作教程
  8. 全国哀悼日 一段css让全站变灰
  9. 牛逼!你竟然把VSCode玩成了IDEA的效果,有点哇塞。。。
  10. Factory method 'springSecurityFilterChain' threw exception
  11. 分布式理论(五)—— 一致性算法 Paxos
  12. 删了手机里的一个html文件,手机操作篇:手机上怎么删除pdf其中一页
  13. LaunchFaster 启动器工具 - 类似 Rolan 和音速启动的图标式快捷启动软件
  14. Linux磁盘存储和文件系统
  15. 上传下载Linux系统指定目录的文件
  16. 一小时刷完英语口语常用3000词汇(绿色护眼版)day6-词汇501-600
  17. 立下19年的flag,跪着也要完成!
  18. 算法分析与设计——规约和NPC问题
  19. 最新电商之推荐系统要诀~
  20. Typescript----前端

热门文章

  1. 融金所-孙明达:中国普惠金融覆盖率已属较高水平
  2. linux 关于回程路由相关问题
  3. SQL自动审核工具archer
  4. mysql archer,archer安装及使用
  5. Python实验、Pandas数据处理与分析
  6. javaweb医院科室管理系统springboot
  7. 李永乐老师讲一个量子计算机,量子计算机到底是什么东西啊?我原来以为就是普通计算机的这个方向。...
  8. airdrop搜不到对方_如何将AirDrop图标添加到您的macOS Dock
  9. php 项目创意,JavaScript实现“创意时钟”项目
  10. 03、STM8程序下载方法