欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Spring Cloud第一站Eureka

程序员文章站 2022-07-16 15:29:27
...

Eureka基础知识

  • eureka现状
     截至这篇文章为止Netflix已经停止了eureka的更新了。作为服务注册中心,因为eureka的停更,部分公司已经相继拥抱zookeeper、consul、nacos。
  • eureka是什么
     Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的。SpringCloud将它集成在其子项目spring-cloud-netflix中,以实现SpringCloud的服务发现功能。
  • eureka包含两大组件:Eureka Server 与 Eureka Client。
    Spring Cloud第一站Eureka

Eureka Server 提供服务注册服务,各个节点启动后,会在Eureka Server中进行注册,这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,服务节点的信息可以在界面中直观的看到。
Eureka Client是一个java客户端,用于简化与Eureka Server的交互,客户端同时也就是一个内置的、使用轮询(round-robin)负载算法的负载均衡器。

  • 保护机制
     在应用启动后,将会向Eureka Server发送心跳,默认周期为30秒,如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,Eureka Server将会从服务注册表中把这个服务节点移除(默认90秒)。
     Eureka Server之间通过复制的方式完成数据的同步,Eureka还提供了客户端缓存机制,即使所有的Eureka Server都挂掉,客户端依然可以利用缓存中的信息消费其他服务的API。综上,Eureka通过心跳检查、客户端缓存等机制,确保了系统的高可用性、灵活性和可伸缩性。

Eureka 单机下构建

构建eureka server端

  1. 导入依赖坐标
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
  1. 编写yml配置
server:
  port: 7001
eureka:
  instance:
    hostname: localhost #eureka服务端的实例名称
  client:
    #false 表示不向服务中心注册自己
    register-with-eureka: false
    #false 表示自己就是服务中心,不需要去检测服务,职责就是维护服务实例
    fetch-registry: false
    #设置与eureka server交互的地址查询服务和注册服务都需要依赖这个地址
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  1. 主启动类中加入 @EnableEurekaServer注解
    Spring Cloud第一站Eureka

浏览器中访问 http://localhost:7001 配置成功则可以看到
Spring Cloud第一站Eureka
构建eureka client端 service provider

  1. 导入eureka 坐标
    同server端导入
  2. 编写yml文件
eureka:
  client:
    register-with-eureka: true
    fetch-registry: true
    # 注册进入的eureka server地址
    service-url:
      defaultZone: http://localhost:7001/eureka/
  1. 主启动中加入 @EnableEurekaClient 注解
    Spring Cloud第一站Eureka
  2. 刷新 http://localhost:7001/ 页面
    Spring Cloud第一站Eureka
    构建eureka client端 service consumer
    操作步骤同上
    可以看到
    Spring Cloud第一站Eureka

Eureka集群构建

 eureka构建集群,其目的是为一台服务器中的eureka server挂掉了。可以使用另外的eureka 注册服务器。
Spring Cloud第一站Eureka

互相指向,互相备份
本地模拟,eureka server 互相指向

修改了 etc/hosts 文件中的 127.0.0.1 ip,使其有了两个新的指向域名
127.0.0.1 eureka7001.com
127.0.0.1 eureka7002.com

其中7001端口号的yml文件中
Spring Cloud第一站Eureka
其中7002端口号的yml文件中
Spring Cloud第一站Eureka
使用浏览器分别访问,端口号7001、7002
http://localhost:7001   http://localhost:7002
Spring Cloud第一站Eureka
Spring Cloud第一站Eureka
可以看到两个eureka server 互相守望,表示注册成功

将eureka client端写入集群
修改yml 配置

service-url:
	  #有几个server端,就配置几个ip端口号进去
      defaultZone: http://eureka7001.com:7001/eureka/,http://eureka7002.com:7002/eureka/

  到此,多eureka server 单生产者,模型产生了。此模型,当server服务器挂掉的时候,另一台服务器可以顶替。但是,当多个consumer请求去访问provide时,provider处理请求效率会大大降低。于是,多provider模型也应运而生。
Spring Cloud第一站Eureka

多provider模型
Spring Cloud第一站Eureka
多provider模型构建
  新增application.name同8001端口的module,其他配置同8001端口

server:
  port: 8002
  servlet:
    context-path: /
spring:
  application:
    name: provider-payment

修改,consumer连接服务的url
Spring Cloud第一站Eureka

private static final String URI = "http://PROVIDER-PAYMENT";

在RestTemplate 配置中新增 @LoadBalanced注解
Spring Cloud第一站Eureka
访问consumer时,就可以看到服务请求是轮循访问8001与8002端口号

修改eureka注册器中的status
Spring Cloud第一站Eureka

instance:
    instance-id: payment8002
    prefer-ip-address: true

配置后,方便管理查看各服务器对应的ip与端口
配置位置
Spring Cloud第一站Eureka

Eureka其他配置

eureka:
  instance:
    lease-expiration-duration-in-seconds: 90 #Eureka服务端在收到最后一次心跳后等待时间上限 ,单位为秒(默认是90),超时剔除服务
    lease-renewal-interval-in-seconds: 30 #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30)
  server:
    enable-self-preservation: true  #保护机制默认开启(server端发送消息后,client没有回应,不会立马清除client)
相关标签: spring cloud