搭建注册中心Eureka
以下概念性的语言均为本人理解,欢迎大佬指出错误,小白希望深入理解请到官网
Github源码参考:https://github.com/HanJuly/SpringCloudDemo
微服务概念
-
在传统的单体系统中,我们以分包(或者其他的方式)划分不同的业务模块以保证高可维护性。当我们的系统越来越复杂的时候,会出现很多重复,交叉的业务。刚开始我们还是能接受的这样维护成本,但是当这些模块的交叉越来越多,越来越复杂的时候,我们就需要重构系统。
-
这时候就需要,将系统重新分块,提取重复的功能,梳理模块之间的耦合关系,使用Restful的方式进行通信减少模块之间的耦合。这时候微服务就是最好不过得架构模式了
-
从团队的管理角度看,当系统的业务复杂的时候,不仅是代码之间的耦合度增加,而且项目团队之间的也会出现大量复杂的交集。
-
微服务具有的每一个服务可以独立运行,且它们之间通过RPC(远程程序调用)通信(Eureka是Http协议,Dubbo是使用Netty自定义的Dubbo协议)。它们可以部署在一台机器上也可以不同的机器。
Eureka是什么?
Eureka是一个分布式微服务的注册中心,保存一些微服务之间的信息。它是一个基于Restful的服务,包括客服端和服务端两个jar包。实现服务注册,负载均衡,故障转移等功能。
为什么要使用Eureka
- 它就类似于网络结构中的路由表,保存了微服务名与服务ip的的表。这些表如果给每一个微服务自己去维护那就太浪费资源了。
- Eureka的client包可以实现负载均衡的功能让请求的调用让服务器压力均衡。
怎么使用
环境:
idea 2019 Maven -3.5.0 基于SpringBoot
基于SpringCloud Finchley.RELEASE
1.创建一个Maven工程,并在pom.xml中加入依赖
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>2.0.9.RELEASE</version>
</parent>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
<version>2.1.0.RELEASE</version>
</dependency>
<dependencyManagement>
<!-- https://mvnrepository.com/artifact/org.springframework.cloud/spring-cloud-dependencies -->
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-dependencies</artifactId>
<version>Finchley.RELEASE</version>
<type>pom</type>
<scope>import</scope>
</dependency>
</dependencies>
</dependencyManagement>
重要的事情:以上的springboot版本与springcloud的版本是配套的,修改会导致出现异常不能启动。需要查看版本对应请到官网查看。
基本的web包也是需要加入的!
2.在yaml中配置
info:
artifact: register-center
name: '@project.name@' #获取pom.xml文件中的属性
description: '@project.description@'
version: '@project.version@'
spring-boot-version: '@spring.boot.version@'
spring-cloud-version: '@spring.cloud.version@'
server:
port: ${dev.eureka.server.port} #端口
spring:
profiles: dev
eureka:
server:
enable-self-preservation: false # 关闭自我保护
client:
serviceUrl:
defaultZone: http://${eureka.instance.hostname}:${dev.eureka.server.port}/eureka/ #注册中心地址
registerWithEureka: false # 单机模式 设置为false
fetchRegistry: false # 单机模式 设置为false
instance:
hostname: ${dev.eureka.hostname} # 指定该Eureka实例的主机名
注释解释:
关闭自我保护
Eureka Server 在运行期间会去统计心跳失败比例在 15 分钟之内是否低于 85%,如果低于 85%,Eureka Server 会将这些实例保护起来,让这些实例不会过期,但是在保护期内如果服务刚好这个服务提供者非正常下线了,此时服务消费者就会拿到一个无效的服务实例,此时会调用失败,对于这个问题需要服务消费者端要有一些容错机制,如重试,断路器等。
我们在单机测试的时候很容易满足心跳失败比例在 15 分钟之内低于 85%,这个时候就会触发 Eureka 的保护机制,一旦开启了保护机制,则服务注册中心维护的服务实例就不是那么准确了,此时我们可以使用eureka.server.enable-self-preservation=false来关闭保护机制,这样可以确保注册中心中不可用的实例被及时的剔除
单机模式 设置为false
这两个属性的作用是,在出现两个以上的服务注册中心时,需要把注册中心视为一般的服务管理,需要它们互相注册,互相获取彼此的的“路由表”。保证注册中心的高可用性,单机情况就不需要了。
@EnableEurekaServer
@SpringBootApplication
public class RegisterCenterApplication {
public static void main(String[] args) {
SpringApplication.run(RegisterCenterApplication.class, args);
}
}
3.启动
把它视为一个web工程启动后,浏览器进入http://127.0.0.1:8500(取决你的配置)
其他都是一些本机的信息,还可以使用xml的方式查看:http://127.0.0.1:8500/eureka/apps image.png
至此注册中心就搭建完成,那么我们怎么注册我们服务呢?下一篇文章