简介
关于 eureka 首先我们去官网去看一下相关的描述:https://github.com/Netflix/eureka/wiki/Eureka-at-a-glance
eureka 在微服务中的主要作用是服务发现,我们可以把一个服务(项目)注册到eureka中,这样,这个服务就可以被其它服务发现,当然微服务不止是一个服务这么简单,一个微服务架构项目的顺利运行,需要很多不同功能的微服务去共同去实现。
当一个服务可以被发现了以后,我们可以获取这个服务,然后去调用这个服务,在调用服务的时候,如果一个服务是由多个相同的项目提供,当一个请求到来的时候,我们到底是要哪个项目来接收请求去处理呢?这个时候我们又涉及到负载均衡的问题...本文的主要内容还只是eureka的使用和eureka在微服务中担任的服务发现角色去写的。
使用
使用说明
eureka既然是注册中心,那就有服务端和客户端,所谓服务端,就是记录服务信息,比如一个人想要卖东西,那么他必须去淘宝这类的软件去注册一个店铺,然后其它人如果需要买东西就可以登陆淘宝去找这个东西。他的店铺相当于客户端。淘宝就是服务端。
以下案例解释:
springcloud-eureka-server :eureka的服务端
springcloud-eureka-client-a:eureka的客户端A
springcloud-eureka-client-b:eureka的客户端B
A,B两个项目注册到eureka的服务端,这样服务端就可以看到A,B两个项目的信息了,eureka的功能也就是实现了,至于项目和项目之间的调用就要哦使用服务调用了,已经不属于eureka的范畴了。
eureka 服务中心-服务端
新建Spring Boot项目springcloud-eureka-server,pom文件加入依赖:
<dependencies>
<!-- eureka-server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
配置文件application.yml
server:
port: 2222
eureka:
instance:
hostname: localhost #eureka服务端的实例名称
client:
#false表示不向注册中心注册自己(想注册也可以,不过没必要)
register-with-eureka: false
#false表示自己端就是注册中心,职责就是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#设置与eurekaServer交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
启动类上添加注解:
@EnableEurekaServer
eureka 服务中心-客户端-单机版
新建Spring Boot项目springcloud-eureka-client-a,pom文件加入依赖:
<dependencies>
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
</dependencies>
配置文件application.yml
server:
port: 3333
eureka:
client:
#true表示向注册中心注册自己,默认为true
register-with-eureka: true
#是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
fetch-registry: true
service-url:
defaultZone: http://localhost:2222/eureka
spring:
application:
name: springcloud-client-a
启动类上添加注解
@EnableEurekaClient
仿照springcloud-client-a 项目新建springcloud-client-b ,然后只需要把application.yml 文件的端口号3333改为4444就可以了
依次启动 springcloud-eureka-server,springcloud-client-a,springcloud-client-b
访问:http://localhost:2222/
页面展示如下:
红色框中,我们可以看到,springcloud-client-a 和 springcloud-client-b 已经展示在服务列表中了,eureka的作用也就完成了。
eureka服务集群
这个集群其实,有注册中心的服务端集群和客户端的集群,服务端集群就是多个springcloud-eureka-server(多个淘宝,拼多多,蘑菇街...),配置的时候,淘宝的配置文件appliaction.yml的defaultZone属性要写拼多多和蘑菇街的地址,(相互守望,互相注册的意思)
客户端集群的配置,两个提供相同服务的项目,在配置文件application.yml写相同的spring.application.name就可以了(在淘宝,两个人注册相同名称的店名)
项目地址
关于项目的地址,有兴趣的可以自行下载
git@gitee.com:anxc/study-demo-eureka.git
eureka 自我保护
说到自我保护就不得不说心跳机制了,其实就是间隔一定的时间去相互发送请求告知对方我还活着的意思,当启动了自我保护(默认是自动启动的)以后,如果一个服务突然宕机了,那么eureka的注册中心不会立即删掉这个服务的信息,而是把它保护起来,等到它再次启动以后,把它的退出保护状态。这里其实涉及到了著名的CAP理论。
eureka.server.enable-self-preservation设为false 则关闭eureka的自我保护机制
参考文章
https://segmentfault.com/a/1190000022576370
https://blog.csdn.net/wangmx1993328/article/details/88074605
https://www.cnblogs.com/xishuai/p/spring-cloud-eureka-safe.html