euerka总结 当幸福来敲门

一、euerka的基本知识

1. 服务治理

Spring Cloud 封装了 Netflix 公司开发的 Eureka 模块来实现服务治理
在传统的rpc远程调用框架中,管理每个服务与服务之间依赖关系比较复杂,
管理比较复杂,所以需要使用服务治理,管理服务于服务之间依赖关系,
可以实现服务调用、负载均衡、容错等,实现服务发现与注册。

2. 服务注册

Eureka采用了CS的设计架构,Eureka Server 作为服务注册功能的服务器,它是服务注册中心。
而系统中的其他微服务,使用 Eureka的客户端连接到 Eureka Server并维持心跳连接。
这样系统的维护人员就可以通过 Eureka Server 来监控系统中各个微服务是否正常运行。
在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把当前自己服务器的信息
比如:服务地址通讯地址等以别名方式注册到注册中心上。另一方(消费者|服务提供者),
以该别名的方式去注册中心上获取到实际的服务通讯地址,
然后再实现本地RPC调用RPC远程调用框架核心设计思想:
在于注册中心,因为使用注册中心管理每个服务与服务之间的一个依赖关系(服务治理概念)。
在任何rpc远程框架中,都会有一个注册中心(存放服务地址相关信息(接口地址))

3. Eureka包含两个组件:Eureka Server和Eureka Client

Eureka Server提供服务注册服务
各个微服务节点通过配置启动后,会在EurekaServer中进行注册,
这样EurekaServer中的服务注册表中将会存储所有可用服务节点的信息,
服务节点的信息可以在界面中直观看到。

EurekaClient通过注册中心进行访问
是一个Java客户端,用于简化Eureka Server的交互,客户端同时也具备一个内置的、
使用轮询(round-robin)负载算法的负载均衡器。
在应用启动后,将会向Eureka Server发送心跳(默认周期为30秒)。
如果Eureka Server在多个心跳周期内没有接收到某个节点的心跳,
EurekaServer将会从服务注册表中把这个服务节点移除(默认90秒)

二、euerka的Server端以及单机集群的相关配置

  • 启动类

    在启动类上添加注解:

    @EnableEurekaServer  // 标明该服务是euerka的一个服务注册中心
    @SpringBootApplication(exclude = DataSourceAutoConfiguration.class)  // 避免加载数据库报错
    
  • 配置文件:使用yml配置文件

    server:
      port: 7000
    
    eureka:
      instance:
        hostname: eureka7000  # eureka服务端的实例名称
      client:
        register-with-eureka: false     # false表示不向注册中心注册自己。
        fetch-registry: false     # false表示自己端就是注册中心,我的职责就是维护服务实例,并不需要去检索服务
        service-url:
          # 集群配置,指向其他euerka
           defaultZone: http://eureka7001:7001/eureka/
          # 单机配置
         # defaultZone: http://eureka7000:7000/eureka/
        
        # server:
        # 关闭自我保护机制,保证不可用服务被及时踢除
        # enable-self-preservation: false
        # eviction-interval-timer-in-ms: 2000
    

三、euerka的client端以及单机集群的相关配置

  • 启动类

    @EnableEurekaClient 	// 标明将该服务注册到euerka注册中心
    
  • 配置文件:yml配置文件

server:
  port: 8000  # 端口号

spring:
  application:
    name: payment # 服务名
  datasource:
    type: com.alibaba.druid.pool.DruidDataSource            # 当前数据源操作类型
    driver-class-name: org.gjt.mm.mysql.Driver              # mysql驱动包
    url: jdbc:mysql://127.0.0.1:3306/spring-cloud?useUnicode=true&characterEncoding=utf-8&useSSL=false
    username: root   # 用户名
    password: root   # 密码

eureka:
  client:
    # 表示是否将自己注册进EurekaServer默认为true。
    register-with-eureka: true
    # 是否从EurekaServer抓取已有的注册信息,默认为true。单节点无所谓,集群必须设置为true才能配合ribbon使用负载均衡
    fetchRegistry: true
    service-url:
      # 单机版
    # defaultZone: http://localhost:7000/eureka
      # 集群版
      defaultZone: http://eureka7000:7000/eureka,http://eureka7001:7001/eureka
  instance:
    instance-id: payment8000  # euerka注册中心中显示的实例名
    # 访问路径可以显示IP地址
    prefer-ip-address: true
    #Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
    #lease-renewal-interval-in-seconds: 1
    #Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
    #lease-expiration-duration-in-seconds: 2

mybatis-plus:
  mapperLocations: classpath:com/kl/payment/mapper/xml/*.xml    # 扫描xml文件

四、euerka的自我保护机制

当某些服务发送的心跳数没有按照设定的时间间隔正常返回时,euerka会触发自我保护机制。

开启保护机制的情况下euerka不会立即将对应的服务下线,而是认为该服务可能出现了例如网络延时

这样的问题,只要在到达强制下线的时间才会将服务正式下线。

默认心跳时间:30秒一次

默认强制下线时间:90秒

  • 配置文件中的具体配置

    eureka:
      instance:
        # Eureka客户端向服务端发送心跳的时间间隔,单位为秒(默认是30秒)
        lease-renewal-interval-in-seconds: 1      # 可以根据具体场景进行修改
        # Eureka服务端在收到最后一次心跳后等待时间上限,单位为秒(默认是90秒),超时将剔除服务
        lease-expiration-duration-in-seconds: 10  # 可以根据具体场景进行修改
    

五、服务发现

对于注册进eureka里面的微服务,可以通过服务发现来获得该服务的信息

  • 主启动类

    @EnableDiscoveryClient    // 服务发现
    
  • 需要用的到controller、service直接注入

    @Autowired
    private DiscoveryClient discoveryClient;
    
    // 调用例子 
    @GetMapping(value = "/payment/discovery")
    public Object discovery(){
        List<String> services = discoveryClient.getServices();
        for (String element : services) {
            System.out.println(element);
        }
    
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance element : instances) {
            System.out.println(element.getServiceId() + "\t" + element.getHost() + "\t" + element.getPort() + "\t"
                               + element.getUri());
        }
        return this.discoveryClient;
    }
    

六、 actuator微服务信息完善

  • 主机名称:服务名称修改、访问信息有IP信息提示

    eureka:
      instance:
        # 服务名称
        instance-id: payment8000
        # 访问路径可以显示IP地址
        prefer-ip-address: true
    
  • 服务健康检查

    检查服务order

    浏览器输入 http://IP:端口号/actuator/health,显示 status : "UP" 说明服务正常

原文地址:https://www.cnblogs.com/wufuqin/p/15652164.html