Eureka服务注册与发现
简介Eureka是Netflix服务发现的服务端与客户端,Eureka提供服务注册以及服务发现的能力,当是Eureka Server时(注册中心),所有的客户端会向其注册,当是Eureka Client时,可以从注册中心获取对应的服务信息,或者是向Eureka Server将自己作为实例注册进去,每个Eureka不仅仅是一个服务端同时还是一个客户端。注册中心当Eureka想要成为注册中...
简介
Eureka是Netflix服务发现的服务端与客户端,Eureka提供服务注册以及服务发现的能力,当是
Eureka Server
时(注册中心),所有的客户端会向其注册,当是Eureka Client
时,可以从注册中心获取对应的服务信息,或者是向Eureka Server
将自己作为实例注册进去,每个Eureka不仅仅是一个服务端同时还是一个客户端。
注册中心
当Eureka想要成为
注册中心
时,必须将注册中心的服务地址指向自己,同时禁用服务检索的功能。Eureka是一个高可用的组件,它没有后端缓存,每一个实例注册之后需要向注册中心发送心跳来检测服务的可用性,注册中心不处理请求的转发,只是记录每个实例注册进来的信息。
创建注册中心
- 引入依赖:
<!--eureka server -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka-server</artifactId>
</dependency>
- 开启注册中心注解:
/**
* @EnableEurekaServer 启动注册中心
*/
@EnableEurekaServer
@SpringBootApplication
public class EurekaRegisterMasterApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaRegisterMasterApplication.class, args);
}
}
- 配置文件:
application.yml
#服务端口
server:
port: 8880
eureka:
instance:
hostname: register-master
client:
#通过设置fetch-registry与register-with-eureka 表明自己是一个eureka服务
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
spring:
application:
name: register-center
fetch-registry:
检索服务选项,当设置为True(默认值)时,会进行服务检索,注册中心不负责检索服务。register-with-eureka:
服务注册中心也会将自己作为客户端来尝试注册自己,为true(默认)时自动生效eureka.client.serviceUrl.defaultZone
是一个默认的注册中心地址。配置该选项后,可以在服务中心进行注册。
所以一般情况下,当我们设置服务为注册中心时,需要关闭eureka.client.fetch-registry
与eureka.client.register-with-eureka
,在做注册中心集群的时候,register-with-eureka
必须打开,因为需要进行相互注册,不然副本无法可用。
服务发现
Eureka如果不做注册中心时,它就是一个客户端,向注册中心提供注册的实例,每一个实例注册之后需要向注册中心发送心跳来检测服务的可用性,当需要调用服务的时候,它们会自己从注册中心去检索对应的服务信息,为了保证高性能,Eureka并不是每次都会去注册中心查询服务,
Eureka Client
注册到Eureka Server
时,彼此会进行数据同步,也就是说Eureka Client
会缓存一份Eureka Server
中的服务列表信息,当本地服务不可用的时候才会去注册中心获取,这样可以较低服务端的请求压力,也提升了服务调用的时间。
- 引入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-eureka</artifactId>
</dependency>
- 开启服务发现
@EnableEurekaClient
@SpringBootApplication
public class ConfigServerApplication {
public static void main(String[] args) {
SpringApplication.run(ConfigServerApplication.class, args);
}
}
@EnableEurekaClient
与@EnableDiscoveryClient
的区别:
- @EnableDiscoveryClient注解是基于spring-cloud-commons依赖,相当于一个公共的服务发现;
- @EnableEurekaClient注解是基于spring-cloud-netflix依赖,只能为eureka作用;
- 配置文件
application.yml
server:
port: 8881
spring:
application:
name: eureka-client
eureka:
client:
serviceUrl:
defaultZone: http://localhost:8080/eureka/
注册中心集群化
为了提供高可用性,说白了就是保证机器挂了还是可以服务注册的能力,一般都不会将注册中心部署到一台机器上,而是采取多台机器部署,集群化管理。
注册中心的集群化,最简单的做法就是,将注册中心相互注册,但是不开启检索服务的能力(fetch-registry: false
),这也是Eureka的特性使得的,因为Eureka天然就是集服务端与客户端为一体的。
下面将采取单机部署多注册中心的模式:
三台注册中心分别为:register-master:8080 register-salve1:8081 register-salve2:8082
整个应用名称为:register-center
修改配置文件
master:
#服务端口
server:
port: 8880
eureka:
instance:
hostname: register-master
client:
#通过设置fetch-registry与register-with-eureka 表明自己是一个eureka服务
fetch-registry: false
# register-with-eureka: false
#注册register-salve1,register-salve2做注册中心集群
service-url:
defaultZone: http://register-salve1:8881/eureka/,http://register-salve2:8882/eureka/
spring:
application:
name: register-center
salve1:
#服务端口
server:
port: 8881
eureka:
instance:
hostname: register-salve1
client:
#通过设置fetch-registry与register-with-eureka 表明自己是一个eureka服务
# #由于注册中心的职责就是维护服务实例,它并不需要去检索服务,所以也设置为false
fetch-registry: false
# #默认设置下,服务注册中心也会将自己作为客户端来尝试注册自己,这里禁用它的客户端注册行为
# register-with-eureka: false
#注册register-salve1,register-salve2做注册中心集群
service-url:
defaultZone: http://register-master:8880/eureka/,http://register-salve2:8882/eureka/
spring:
application:
name: register-center
salve2:
#服务端口
server:
port: 8882
eureka:
instance:
hostname: register-salve2
client:
#通过设置fetch-registry与register-with-eureka 表明自己是一个eureka服务
fetch-registry: false
# register-with-eureka: false
#注册register-salve1,register-salve2做注册中心集群
service-url:
defaultZone: http://register-master:8880/eureka/,http://register-salve1:8881/eureka/
spring:
application:
name: register-center
注意:
由于单机模拟,所以我们需要修改hosts文件,添加对应的映射:
127.0.0.1 register-master
127.0.0.1 register-salve1
127.0.0.1 register-salve2
现在随便注册一个服务到其中一个注册中心,三个注册中心都可以查看到。
Master:
Salve1:
Salve2:
可以查看到注册中心的副本:两个可用
更多推荐
所有评论(0)