目录
一、概念
(1)服务治理
在没有服务注册中心时,RestTemplate同样可以帮助我们搭建微服务工程。但当服务很多时,管理每个服务与服务之间的依赖关系非常复杂。所以需要使用服务治理来管理服务与服务之间的依赖关系,从而实现服务调用、负载均衡、容错、服务的注册与发现等
(2)服务注册
Eureka Server 作为服务注册功能的服务器,它是服务注册中心。而系统中的其他微服务,使用 Eureka 的客户端连接到 Eureka Server,并维持心跳连接。这样系统的维护人员就可以通过 Eureka Server 来监听系统中各个微服务是否正常运行。
(3)Eureka 组件
- Eureka Server :各个微服务节点通过配置启动后,会在 Eureka Server 中进行注册
- Eureka Client :它是一个 Java 客户端,用于简化与 Eureka Server 的交互。在应用启动后,Eureka Client 将会向 Eureka Server 发送心跳连接。如果 Eureka Server 在多个心跳周期内没有接收到某个节点的心跳,Eureka Server 将会从服务注册表中把这个服务节点移除
二、单机版
(1)搭建 Eureka Server 工程
- 引入依赖
<!-- 加入eureka-server依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
- 设置配置文件
eureka:
instance:
hostname: localhost #eureka服务端的实例名字
client:
#false表示不向注册中心注册自己
register-with-eureka: false
#false表示自己就是注册中心,职责是维护服务实例,并不需要去检索服务
fetch-registry: false
service-url:
#设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
- 启动类添加注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
public static void main(String[] args) {
SpringApplication.run(EurekaMain7001.class,args);
}
}
(2)搭建Eureka Client工程
- 引入依赖
<!-- 引入eureka-client依赖 -->
<dependency>
<groupId>org.springframework.cloud</groupId>
<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
- 修改配置文件
spring:
application:
name: cloud-order-service
eureka:
client:
# 表示是否将自己注册进 EurekaServer.默认为true
register-with-eureka: true
# 是否从EurekaServer抓取已有的注册信息,默认为true.单节点无所谓,集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true
service-url:
#EurekaServer地址
defaultZone: http://localhost:7001/eureka #单机版
- 启动类添加注解
@EnableEurekaClient
@SpringBootApplication
public class PaymentMain8001 {
public static void main(String[] args) {
SpringApplication.run(PaymentMain8001.class, args);
}
}
三、集群版
(1)修改host文件
(2)修改yml文件
互相注册,相互守望
server:
port: 7001
eureka:
instance:
hostname: eureka7001.com #eureka服务端实例地址
# 服务端的实例名称
# hostname: localhost
client:
# 不向注册中心注册自己
register-with-eureka: false
# 自己就是注册中心,不需要检索服务
fetch-registry: false
service-url:
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eureka7002.com:7002/eureka/
server:
port: 7002
eureka:
instance:
# 服务端的实例名称
# hostname: localhost
hostname: eureka7002.com #eureka服务端实例地址
client:
# 不向注册中心注册自己
register-with-eureka: false
# 自己就是注册中心,不需要检索服务
fetch-registry: false
service-url:
# defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
defaultZone: http://eureka7001.com:7001/eureka/
(3)修改生产者yml文件
eureka:
client:
# 表示是否将自己注册进 EurekaServer.默认为true
register-with-eureka: true
# 是否从EurekaServer抓取已有的注册信息,默认为true.单节点无所谓,集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true #单机需为false
service-url:
#EurekaServer地址
# defaultZone: http://localhost:7001/eureka #单机版
# defaultZone: http://eureka7001.com:7001/eureka #单机版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
(4)对消费者进行修改
- 修改controller
- 修改ApplicationContextConfig,开启负载均衡注解,负载均衡默认为轮询
(5)信息完善
eureka:
client:
# 表示是否将自己注册进 EurekaServer.默认为true
register-with-eureka: true
# 是否从EurekaServer抓取已有的注册信息,默认为true.单节点无所谓,集群必须设置为true,才能配合ribbon使用负载均衡
fetchRegistry: true #单机需为false
service-url:
#EurekaServer地址
# defaultZone: http://localhost:7001/eureka #单机版
# defaultZone: http://eureka7001.com:7001/eureka #单机版
defaultZone: http://eureka7001.com:7001/eureka,http://eureka7002.com:7002/eureka #集群版
instance:
# 服务名称修改
instance-id: payment8001
# 显示ip地址
prefer-ip-address: true
四、自我保护机制
默认情况下,如果 Eureka Server 在一定时间内没有收到某个微服务实例的心跳,Eureka Server 便会将该实例注销。 (默认是90s)
但是当网络分区发生故障(延迟、卡顿、拥挤)时,微服务与 Eureka Server 之间是无法正常通信的,在这种情况下微服务本身其实是健康的,本来是不应该注销这个服务的,此时 Eureka 便会通过 “自我保护模式” 来解决这个问题。
- 生产环境中是不建议关闭 Eureka 的自我保护模式
eureka:
server:
#关闭自我保护机制,保证不可用服务被及时剔除
enable-self-preservation: false