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: //eureka7001:7001/eureka/
          # 單機配置
         # defaultZone: //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: //localhost:7000/eureka
      # 集群版
      defaultZone: //eureka7000:7000/eureka,//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

    瀏覽器輸入 //IP:端口號/actuator/health,顯示 status : “UP” 說明服務正常