Eureka服务注册与发现

1,095 阅读2分钟

Eureka

Eureka是Netflix服务发现的服务端与客户端,Eureka提供服务注册以及服务发现的能力,当是Eureka Server时(注册中心),所有的客户端会向其注册,当是Eureka Client时,可以从注册中心获取对应的服务信息,或者是向Eureka Server将自己作为实例注册进去,每个Eureka不仅仅是一个服务端同时还是一个客户端。

注册中心

reka想要成为注册中心时,必须将注册中心的服务地址指向自己,同时禁用服务检索的功能。Eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳来检测服务的可用性,注册中心不处理请求的转发,只是记录每个实例注册进来的信息。

注册中心的创建

(1)引入依赖:eureka server

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

(2)开启注册中心注解: (3)修改yml配置文件:application.yml

fetch-registry: 
  检索服务选项,当设置为True(默认值)时,会进行服务检索,注册中心不负责检索服务。
register-with-eureka: 
  服务注册中心也会将自己作为客户端来尝试注册自己,为true(默认)时自动生效
eureka.client.serviceUrl.defaultZone:
  是一个默认的注册中心地址。配置该选项后,可以在服务中心进行注册。

设置服务为注册中心时,需要关闭eureka.client.fetch-registryeureka.client.register-with-eureka,在做注册中心集群的时候,register-with-eureka必须打开,因为需要进行相互注册,不然副本无法可用.

服务的发现

Eureka如果不做注册中心时,它就是一个客户端,向注册中心提供注册的实例,每一个实例注册之后需要向注册中心发送心跳来检测服务的可用性,当需要调用服务的时候,它们会自己从注册中心去检索对应的服务信息,为了保证高性能,Eureka并不是每次都会去注册中心查询服务,Eureka Client注册到Eureka Server时,彼此会进行数据同步,也就是说Eureka Client会缓存一份Eureka Server中的服务列表信息,当本地服务不可用的时候才会去注册中心获取,这样可以较低服务端的请求压力,也提升了服务调用的时间。

(1) 引入坐标

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

(2) 开启服务发现 【注】:@EnableEurekaClient与@EnableDiscoveryClient的区别

@EnableDiscoveryClient注解是基于spring-cloud-commons依赖,相当于一个公共的服务发现;换句话说,这个注解也不仅仅用于eureka,如ZK @EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;

(3) yml配置文件:application.yml