服务中心
服务的注册发现对于微服务来说是一个非常重要的环节。在微服务架构中,每个服务(Service)是动态变化的,难以通过静态配置的方式维护服务,需要用到服务发现框架来完成服务(Service)的自动化管理。常见的服务中心框架有:
- Eureka
- Consul
- ETCD
- Zookeeper
- Nacos
它们的区别如下:
Eureka简介
Eureka是Netflix开发的服务发现框架,Spring Cloud将Eureka集成到子项目Spring-Cloud-Netflix中实现服务发现功能。
Spring Cloud框架下的服务发现Eureka包含两个组件,分别是:Eureka Server与Eureka Client。
- Eureka Server,也称为服务注册中心。各个服务启动后,会在Eureka Server中进行注册,这样Eureka Server的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
- Eureka Client也称为服务(服务实例)。作为一个Java客户端,用于简化与Eureka Server的交互。
Eureka工作原理
Eureka Client注册在Eureka Server,Eureka Client中的服务Service是通过REST调用的。Eureka Client还具有缓存功能,它能够从Eureka Server查询当前注册的服务信息并缓存到本地,这样即使Eureka Server宕机,Eureka Client依然可以利用缓存中的信息调用服务。
Eureka Client存在两种角色,分别是服务提供者和服务消费者。
- 服务提供者( Eureka Client )启动后,会通过REST请求将自己注册在Eureka Server,并维护一个心跳(默认30秒发送一次心跳)进行服务续约,告诉Eureka Server“我还活着”,防止Eureka Server将该服务从服务列表剔除。
- 服务消费者用于获取Eureka Server注册的服务清单,并且该服务清单默认每隔30秒更新一次。服务消费者获取到服务清单后,能够根据自己的需求决定调用哪个服务,默认采用轮询方式调用,从而实现Eureka Client的负载均衡。
搭建Eureka Server
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>
spring-cloud-starter-netflix-eureka-server
</artifactId>
</dependency>
配置文件(yml)
server:
port: 7000
spring:
application:
name: eureka-server
eureka:
client:
fetch-registry: false
register-with-eureka: false
service-url:
defaultZone:
http://${eureka.instance.hostname}:${server.port}/eureka/
instance:
hostname:
localhost
yml文件无法使用中文注释(否则会报错),因此只能在这儿写了:
- 第八行表示是否向Eureka Server注册,默认true
- 第九行#表示是否从Eureka Server获取注册信息,默认true
- 由于此处仅搭建Server,因此无需注册和获取注册信息
启动类添加注解
@SpringBootApplication
@EnableEurekaServer
public class EurekaServerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaServerApplication.class, args);
}
}
启动,并访问http://localhost:7000/
目前暂未注册任何Eureka Client,因此显示不可用
服务提供者
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>
spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
配置文件
server:
port: 7006
spring:
application:
name: eureka-provider
eureka:
client:
service-url:
defaultZone: http://localhost:7000/eureka/
instance:
hostname: localhost
启动类添加注解
@SpringBootApplication
@EnableEurekaClient
public class EurekaProviderApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaProviderApplication.class, args);
}
}
启动,并访问http://localhost:7000/
注意Eureka也要运行
Eureka-provider已经成功注册到Eureka Server中了
服务消费者
导入依赖
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>
spring-cloud-starter-netflix-eureka-client
</artifactId>
</dependency>
配置文件
server:
port: 7002
spring:
application:
name: eureka-consumer
eureka:
instance:
prefer-ip-address: true
client:
service-url:
defaultZone: http://localhost:7000/eureka/
第8行用于设置是否显示主机ip
启动类添加注解
@SpringBootApplication
@EnableEurekaClient
public class EurekaConsumerApplication {
public static void main(String[] args) {
SpringApplication.run(EurekaConsumerApplication.class, args);
}
}
启动,并访问http://localhost:7000/
Eureka-CONSUMER已经成功注册到Eureka Server中了
其他
有时会出现以下情况:
这是因为Eureka有自我保护机制,在默认的情况下,如果Eureka server 在一定的时候内,没有接受到某个微服务的心跳,就会注销该实例,默认时间是90秒。但是当网络发生故障的情况下,微服务和EurekaServer就无法通讯,这样就很危险,因为微服务本身是健康的,此时不应该注销该服务,而EurekaServer通过注销该服务来达到自我保护机制,当网络健康的时候,EurekaServer就会自动退出自我保护机制。可以通过配置文件关闭保护机制:
eureka:
server:
enable-self-preservation: false
源码下载
文件下载 | 文件名称:本节代码.zip | 文件大小:2.27MB |
下载声明:本站文件大多来自于网络,仅供学习和研究使用,不得用于商业用途,如有版权问题,请联系博主! | ||
下载地址:点击下载 |