SpringCloud——Eureka

一、概念

(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 工程

  1. 引入依赖
<!-- 加入eureka-server依赖 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
</dependency>
  1. 设置配置文件
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/

  1. 启动类添加注解
@EnableEurekaServer
@SpringBootApplication
public class EurekaMain7001 {
    public static void main(String[] args) {
        SpringApplication.run(EurekaMain7001.class,args);
    }
}

(2)搭建Eureka Client工程

  1. 引入依赖
<!-- 引入eureka-client依赖 -->
<dependency>
	<groupId>org.springframework.cloud</groupId>
	<artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
</dependency>
  1. 修改配置文件
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     #单机版

  1. 启动类添加注解
@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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值