众所周知,SpringCloud是一系列框架的有序集合,在基于SpringBoot基础设施框架之上,巧妙的统一了一套完整的微服务解决方案全家桶,其组建如服务发现注册eureka、配置中心Config、消息总线Bus、负载均衡Ribbon、断路器Hystrix、服务网关Zuul、、数据监控Actuator等一系列组件,那么Eureka组件就是其中的一个。Eureka是Netflix公司开源的一个RESTful服务框架组件,主要用于服务的注册发现等服务治理,被SpringCloud所整合,形成一个巨大的SpringCloud微服务生态圈。
Eureka是SpringCloud微服务解决方案框架中的一个组件Eureka注册中心, 由Netflix 开发的,一个基于 REST 服务的,服务注册与发现的组件,
它主要包括两个组件: Eureka Server 和 Eureka Client
在各个微服务启动时,会通过 Eureka Client 向 Eureka Server 注册自己,Eureka Server 会存储该服务的信息
也就是说,每个微服务的客户端和服务端,都会注册到 Eureka Server,这就衍生出了微服务相互识别的话题
在这里,我们需要用Spring Cloud Netflix的组件Eureka ,Eureka是一个服务注册和发现模块。图解说明
1. 开发工具: IDEA2018.2.3
2. SpringBoot版本: 2.0.3.RELEASE
3. SpringCloud版本:Finchley.RELEASE
声明: 本SpringCloud系列专栏教程全部基于SpringBoot2.0.3.RELEASE和SpringCloud Finchley.RELEASE这两个版本进行开发、测试以及写文章,工具使用IDEA,建议使用IDEA2018以上版本即可,后面的文章不再做陈述;
1. 打开SpringCloud官网链接:https://spring.io/projects/spring-cloud#overview
从官网介绍说明可以看出,SpringCloud版本命名是以火车(Train)方式命名,SpringBoot版本则以数字命令,其两者对应关系如下图:
注意: SpringCloudFinchley系列版本对应SpringBoot2.0.x系列版本
对于SpringBoot版本和SpringCloud版本关系不太清楚的可以阅读以下资料了解下,这里我贴出文章的链接:
https://blog.csdn.net/qq_37143673/article/details/99292705
https://www.jianshu.com/p/352511faab90
https://www.cnblogs.com/zhuwenjoyce/p/10261079.html
为了方便解耦,每篇博客对应每个章节的源码,每个章节的项目以SpringCloud+组件名称组合,例如:springcloud-eureka这种形式吗,因此采用Maven子父工程的形式,后续文章也是如何,只在这里做一下说明,后续不再重复。
第一步: 创建父项目springcloud-eureka,创建过程中不需要勾选任何依赖,创建完之后修改package类型为pom
第二步: 在父工程的基础上创建一个Module,也就是新增一个子项目,这里叫做springcloud-eureka-server,作为Eureka注册中心服务
第三步: 删掉父工程pom文件多余的信息后,父工程pom文件信息以及子父工程项目结构如下图
4.0.0
com.thinkingcao.api
springcloud-eureka-server
0.0.1-SNAPSHOT
springcloud-eureka-server
SpringCloud整合Eureka组件搭建微服务注册中心
org.springframework.boot
spring-boot-starter-parent
2.0.3.RELEASE
UTF-8
UTF-8
1.8
Finchley.RELEASE
org.springframework.cloud
spring-cloud-dependencies
${spring-cloud.version}
pom
import
org.springframework.cloud
spring-cloud-starter-netflix-eureka-server
org.springframework.boot
spring-boot-maven-plugin
#服务端口号
server:
port: 8000
#定义服务名称(服务注册到eureka名称)
spring:
application:
name: app-thinkingcao-eureka
eureka:
instance:
#Eureka注册中心ip地址
hostname: 127.0.0.1
client:
serviceUrl:
#注册地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
#表示是否需要将自己注册给自己的注册中心,因为自己是注册中心,单机版本时不需要,设置为false(集群的时候需要是为true)
register-with-eureka: false
#因为自己是注册中心,不需要去检索服务信息,单机版本时不需要,设置为false(集群的时候需要是为true)
fetch-registry: false
Eureka Client 在启动时需要指定 Zone,它会优先请求自己 Zone 的 Eureka Server 获取注册列表
同样的,Eureka Server 在启动时也需要指定 Zone,如果没有指定的话,其会默认使用 defaultZone;
关于defaultZone、Zone与serviceUrl三者之间的关系,可以查阅文档了解;
启动Eureka注册中心只需要一个注解@EnableEurekaServer,这个注解需要在springboot工程的启动application类上加即可
package com.thinkingcao.api;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer;
@SpringBootApplication
@EnableEurekaServer
public class AppEurekaServer {
public static void main(String[] args) {
SpringApplication.run(AppEurekaServer.class, args);
}
}
打开eureka server 界面,查看注册中心,访问地址 : http://127.0.0.1:8000/ ,因为此时springcloud-eureka-server单纯的只是一个服务注册中心,无任何实例进行服务注册,所以服务注册列表显示的没有任何实例;
当启动Eureka Server时, 因为是单机版,还没有Eureka Client,过一段时间会出现 红色字段:
EMERGENCY! EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE
UP WHEN THEY'RE NOT. RENEWALS ARE LESSER THAN THRESHOLD AND
HENCE THE INSTANCES ARE NOT BEING EXPIRED JUST TO BE SAFE.
这说明Eureka进入保护模式,可通过配置去掉,关于保护模式,后面章节会有专题讲到:
##心跳检测与续约时间(测试环境和本地开发环境将值设置小一点,保证服务关闭后,注册中心能够及时踢出)
instance:
#客户端向Eureka注册中心发送心跳的时间间隔,单位为秒(默认为30s),(客户端会按照此规则向Eureka服务端发送心跳检测包)
lease-renewal-interval-in-seconds: 2
#Eureka注册中心在收到客户端最后一次心跳之后等待的时间上限,单位为秒(默认为90s),超过时间则剔除(客户端会按照此规则向Eureka服务端发送心跳检测包)
lease-expiration-duration-in-seconds: 2
1. 项目源码: https://github.com/Thinkingcao/SpringCloudLearning/tree/master/springcloud-eureka
1.下节任务:以订单服务调用会员服务为例子,学习服务提供和服务消费
2. SpringCloud系列教程(二): Spring Cloud系列教程(二) - 服务提供者和服务消费者Rest+Ribbon(Finchley版本)