• 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" 说明服务正常

  • 相关阅读:
    iPhone将NSString转换编码集为gb2312或者gbk的方法
    iOS下微信语音播放之切换听筒和扬声器的方法解决方案
    苹果开发者各地区联系电话
    iOS开发中,应用内直接跳转到Appstore
    高亮显示UILabel中的子串
    UML
    All Classic Bluetooth profile for iPhone
    智能穿戴设备移动APP端与外设数据传输协议功能模块CMD&ACK表
    Mac 使用技巧分享
    git branch管理小结
  • 原文地址:https://www.cnblogs.com/wufuqin/p/15652164.html
Copyright © 2020-2023  润新知