天天看点

SpringCloud之——Eureka服务注册与发现

Eureka作为SpringCloud全家桶的注册中心,最常说到的问题就是他与zookeeper的区别是什么,我们都知道ACP(可用性、一致性、分区容错性),那么P是必须要保证的,而三者又不可能同时满足,那么在设计的时候就看各自产品的侧重点了,Eureka和Zookeeper两个都能够作为注册中心使用,他们的主要区别是zookeeper保证的是CP(一致性,分区容错性),而Eureka保证的是AP(可用性和分区容错性)!

废话说完了,直接看看怎么写一个Eureka吧!

同时附上我练习时搭建的一个简单的SpringCloud项目,其中包含了feign、swagger-ui、rabbitmq、redis、aop、定时任务、文件上传于下载、excel导出、多数据源配置等demo,该项目也包含了SpringCloud的常用组件:

下载链接://download.csdn.net/download/weixin_45417573/12104123

一、创建服务

Eureka是作为一个独立的服务存在的,所以首先我们要创建一个Eureka服务,也就是一个Springboot项目,这一部分就不做多的叙述,当然,作为微服务的一部分,自然也是作为项目的其中一个子服务存在!

二、添加依赖

这里要注意的是,Eureka服务需要添加EurekaServer依赖,其他服务也要添加EurekaClient的依赖

1、Servcer

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

2、Client

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

三、添加启动类注解

同样,这里有服务和客户端的区别

1、Server

2、Client

四、修改yml配置

这里依旧分为服务和客户端的区别

1、Server

这两个false至关重要,也是与client的主要区别

eureka:
  server:
  #关闭eureka的自我保护机制(开发阶段)
    enable-self-preservation: false
  instance:
    #prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
    hostname: eureka1 #以服务名注册到服务中心(集群之间互相区分)
    #最后一次心跳后间隔多久没有心跳认定服务不可用(一次心跳30秒)
    lease-expiration-duration-in-seconds: 60
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka
      #不将自己注册到eureka中
    register-with-eureka: false
    #不拉取注册信息
    fetch-registry: false
           

关于保护机制,简单的说是eureka会与服务之间有一个心跳检测机制,心跳默认30秒发送一次,如果60秒(我们自己配置的60秒,默认是90秒)收不到心跳反馈,eureka就会认为服务是不可用的,但是eureka并不认为服务是真的不可用了,所以也就不会删除其注册信息,而是将注册信息保护起来,有时候我们看到eureka页面上出现

EMERGENCY!EUREKA MAY BE INCORRECTLY CLAIMING INSTANCES ARE UP WHEN THEY'RE NOT.RENEWALS ARE LESSER THAN THRESHOLD AND HENCE THE INSTANCES ARE NOT BEGING EXPIRED JUST TO BE SAFE

的红色警告就是这个原因,但是开发阶段由于频繁的重启服务可能导致保护机制的启用,可以暂时关闭保护机制!

2、Client

eureka:
  instance:
    prefer-ip-address: true #以IP地址注册到服务中心,相互注册使用IP地址
  client:
    serviceUrl:
      defaultZone: http://localhost:8000/eureka/
           

五、测试

首先启动eureka服务,然后启动其他的服务,启动后在浏览器中访问eureka服务看有没有如下网页,网页中如果有你注册的相关服务即可判断eureka是否正确:

SpringCloud之——Eureka服务注册与发现

注意,访问的时候直接访问ip:端口,后面不要加eureka!!