zoukankan      html  css  js  c++  java
  • Eureka服务治理

    Eureka服务治理

    什么是服务治理?

    SpringCloud封装了Netflit公司开发的Eureka模块来实现服务治理;

    在传统的rpc远程调用框架中,管理每个服务与服务之间的依赖关系比较复杂,所以需要使用服务治理,管理服务与服务之间的依赖关系,可以实现服务调用、负载均衡、容错、实现服务的发现与注册

    什么是服务的注册与发现?

         Eureka采用了CS的设计架构,Eureka Server 作为服务注册的服务器,他是服务的注册中心。而系统中的其他微服务,使用Eureka的客户端连接到Eureka Server并维持心跳连接,这样系统的维护人员就可以通过Eureka Server来监控系统中的各个服务是否运行正常。

         在服务注册与发现中,有一个注册中心。当服务器启动的时候,会把自己的服务器信息 比如服务地址、通讯地址等以别名的方式注册到注册中心上,另一方(消费|服务提供者),以改别名的方式去注册中心上获取到实际的服务通讯地址,然后在实现本地RPC调用RPC远端调用,框架的核心思想:在于注册中心,因为使用注册中心管理每一个服务与服务的依赖关系(服务治概念),在任何的rpc远程框架中,都会有一个注册中心(存放服务地址信息(接口地址))

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

    1Eureka Server: 提供服务注册服务(@EnableEurekaServer加在启动类上)

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

    maven依赖

    EurekaServer以前的老版本使用(2018)
    <dependency>
       <groupId>org.springframework.cloud</groupId>   
       <artifactId>spring-cloud-starter-eureka</artifactId>
    </dependency>
    
    Eureka现在的新版本Server (当前使用2020.2)
    <dependency>
       <groupId>org.springframework.cloud<groupId>   
       <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>

    yml配置:

    server:
      port: 7001
    eureka: instance: # eureka 服务端的实例名称(服务器Ip) hostname: eureka7001.com client: # false 表示不向注册中心注册自己 register-with-eureka: false #false 表示自己端就是注册中心,我的职责就是维护实例,并不需要去检索服务 fetch-registry: false service-url: # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址 # 1: 单机就是自己 defaultZone: http://eureka7001.com:7001/eureka/ # 集群就是指向其他的Eureka # defaultZone: http://eureka7002.com:7002/eureka/ # @@@@【关闭自我保护机制】@@@########################################################### # server: # # 关闭自我保护机制,保证不可用服务及时被踢出 # enable-self-preservation: false # # 服务不可用时2秒提出 # eviction-interval-timer-in-ms: 2000
    2Eureka Client 通过注册中心进行访问(@EnableEurekaClient加在启动类上)

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

    Maven依赖:
    <!--eureka client-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
    

    Yml配置

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

    微服务RPC远程调用的最核心的是高可用

    所以搭建集群的Eureka注册中心,实现负载均衡加容错。

    EurekaServer集群原理:互相注册,相互守望

     单机集群配置:

     找到C:WindowsSystem32driversetchosts文件:

    修改映射配置加入hosts文件中:

            127.0.0.1   eureka7001.com

            127.0.0.1   eureka7002.com

    集群修改yml注册中心地址:7001指向7002,  7002指向7001

    server:
      port: 7001
    
    eureka:
      instance:
      # eureka 服务端的实例名称
        hostname: eureka7001.com
      client:
         # false 表示不向注册中心注册自己
        register-with-eureka: false
        #false 表示自己端就是注册中心,我的职责就是维护实例,并不需要去检索服务
        fetch-registry: false
        service-url:
        # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
          defaultZone: http://eureka7002.com:7002/eureka/
    server:
      port: 7002
    
    
    eureka:
      instance:
      # eureka 服务端的实例名称
        hostname: eureka7002.com
      client:
         # false 表示不向注册中心注册自己
        register-with-eureka: false
        #false 表示自己端就是注册中心,我的职责就是维护实例,并不需要去检索服务
        fetch-registry: false
        service-url:
        # 设置与Eureka Server交互的地址查询服务和注册服务都需要依赖这个地址
          defaultZone: http://eureka7001.com:7001/eureka/

    项目启动注意:

    应该先启动服务注册中心(7001、7002),然后再去启动服务提供者与服务消费者

    通过接口显示注册中心的注册信息:

    启动类上添加: @EnableDiscoveryClient

    @Resource
    private DiscoveryClient discoveryClient;
    
    @GetMapping("payment/discovery")
    public Object discovery(){
        List<String> services = discoveryClient.getServices();
        for (String service : services) {
            log.info("********service: " + service);
        }
    
        List<ServiceInstance> instances = discoveryClient.getInstances("CLOUD-PAYMENT-SERVICE");
        for (ServiceInstance instance : instances) {
            log.info(instance.getServiceId()+ "	" + instance.getHost()+ "	" + instance.getPort()
             + "	" + instance.getUri());
        }
        return this.discoveryClient;
    }
     
  • 相关阅读:
    dubbo入门(一)
    java中文件操作《一》
    Unity 游戏框架搭建 2019 (七) 自定义快捷键
    凉鞋:我所理解的框架 【Unity 游戏框架搭建】
    Unity 游戏框架搭建 2019 (六) MenuItem 复用
    Unity 游戏框架搭建 2019 (五) 打开所在文件夹
    Unity 游戏框架搭建 2019 (四) 导出 UnityPackage
    Unity 游戏框架搭建 2019 (三) 生成文件名到剪切板
    Unity 游戏框架搭建 2019 (二) 文本复制到剪切板
    Unity 游戏框架搭建 2019 (一) 简介与第一个示例文件名的生成
  • 原文地址:https://www.cnblogs.com/dw3306/p/12635284.html
Copyright © 2011-2022 走看看