Spring-Cloud Euraka是Spring Cloud集合中一个组件,它是对Euraka的集成,用于服务注册和发现。Eureka是Netflix中的一个开源框架。它和 zookeeper、Consul一样,都是用于服务注册管理的,同样,Spring-Cloud 还集成了Zookeeper和Consul。
Eureka相当于一个服务注册和发现的中心,Eureka的客户端连接到Eureka的服务端并通过心跳包保持连接,服务端就可以通过这种方式来判断各个微服务是否正常运行,并且能够动态的将非正常运行的微服务实例节点移出。
新建一个Module:Cloud-Eureka-Server-7001,包含 Eureka Server服务
server:
port: 7001
spring:
application:
name: cloud-eureka-server-7001
eureka:
instance:
hostname: localhost
client:
register-with-eureka: false # 不向注册中心注册自己(本身是服务端)
fetch-registry: false
service-url:
# 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
添加 @EnableEurekaServer
注解
通过访问 http://localhost:7001/ 即可查看Eureka当前状态
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
eureka:
client:
register-with-eureka: true # 向注册中心注册自己(本身是客户端)
fetch-registry: true # 抓取已有的注册信息
service-url:
# 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
defaultZone: http://localhost:7001/eureka/
与4.2.2步骤类似^_^
Eureka集群依据”互相注册“原理,所有集群中的单节点相互注册,相互守望,对外是作为一个整体。
只需要修改微服务对应的 Application.yml即可
server:
port: 80
spring:
application:
name: cloud-order-service
eureka:
client:
register-with-eureka: true # 向注册中心注册自己(本身是客户端)
fetch-registry: true # 抓取已有的注册信息
service-url:
# 设置 Eureka Server交互地址 (查询服务和注册服务都要依赖这个地址)
defaultZone: http://eureka7001.test:7001/eureka/,http://eureka7002.test:7002/eureka/
基于Cloud-Provider-Payment-8001,搭建Cloud-Provider-Payment-8002微服务
Application.yml添加如下配置
instance:
instance-id: payment8001
prefer-ip-address: true
在Payment服务中使用Discovery Client的示例
@Resource
private DiscoveryClient discoveryClient;
@GetMapping("/payment/discovery")
public Object discovery() {
List<String> services = discoveryClient.getServices();
services.forEach(x -> log.info("Service: " + x));
List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
instances.forEach(x -> log.info(
"Instance: " + x.getInstanceId() + "," + x.getHost() + "," + x.getPort() + "," + x.getUri()
));
return this.discoveryClient;
}
Eureka的自我保护特性主要用于减少在网络分区或者不稳定状况下的不一致性问题。
Eureka在运行期间会统计心跳失败的比例,在15分钟内是否低于85%,如果出现了低于的情况,Eureka Server会将当前的实例注册信息保护起来,同时提示一个警告,一旦进入保护模式,Eureka Server将会尝试保护其服务注册表中的信息,不再删除服务注册表中的数据。也就是不会注销任何微服务。
配置方式与Eureka大同小异