1. 程式人生 > 實用技巧 >服務註冊中心

服務註冊中心

1、Eureka

什麼是服務治理?

​ Spring Cloud 封裝了Netflix 公司開發的Eureka 模組來實現服務治理

​ 在傳統的RPC遠端呼叫框架中,管理每個服務與服務之間依賴關係比較複雜,管理比較複雜,所以需要使用服務治理,管理服務與服務之間的依賴關係,可以實現服務呼叫、負載均衡、容錯等,實現服務發現與註冊。

什麼是服務註冊與發現

​ Eureka採用了CS的設計架構,Eureka Server作為服務註冊功能的伺服器,它是服務註冊中心。而系統中的其他微服務,使用Eureka的客戶端連線到Eureka Server並維持心跳連線。這樣系統的維護人員就可以通過Eureka Server來監控系統中各個微服務是否正常執行。

​ 在服務註冊與發現中,有一個註冊中心。當伺服器啟動的時候,會把當前自己伺服器的資訊比如服務地址,通訊地址等以別名方式註冊到註冊中心上。另一方(消費者|服務提供者),以該別名的方式去註冊中心上獲取到實際的服務通訊地址,然後再實現本地RPC呼叫RPC遠端呼叫框架核心設計思想:在於註冊中心,因為使用註冊中心管理每個服務與服務之間的一個依賴關係(服務治理概念)。在任何RPC遠端框架中,都會有一一個註冊中心(存放服務地址相關資訊(介面地址)

Eureka包含兩個元件: Eureka Server和Eureka Client

Eureka Server 提供服務註冊服務

​ 各個微服務節點通過配置啟動後,會在Eureka Server中進行註冊,這樣Eureka Server中的服務登錄檔中將會存 儲所有可用服務節點的資訊,服務節點的資訊可以在介面中直觀看到。

Eureka Client通過註冊中心進行訪問

​ 是一個Java客戶端,用於簡化Eureka Server的互動,客戶端同時也具備一個內建的、使用輪詢(round-robin)負載演算法的負載均衡器。在應用啟動後,將會向Eureka Server傳送心跳(預設週期為30秒)。如果Eureka Server在多個心跳週期內沒有接收到某個節點的心跳,Eureka Server將 會從服務登錄檔中把這個服務節點移除(預設90秒)

1.1、Eureka 單機版使用

  1. 改Pom 新增依賴

    <!--eureka-server-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    
    <!--eureka client-->
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    
  2. 改appliation.yml

    # eureka server 端
    server:
      port: 7001
    
    eureka:
      instance:
        hostname: localhost # eureka 服務端的例項名稱
      client:
        # false 表示不向註冊中心註冊自己
        # false 表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要檢索服務
        register-with-eureka: false
        service-url:
          # 設定與Eureka Server 互動的地址查詢服務和註冊服務都需要以來這個地址
          defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
          
    # eureka client 端
    eureka:
      client:
        # true 表示將自己註冊金 EurekaServer 預設為true
        register-with-eureka: true
        # 是否從 EurekaServer 抓取已有的註冊資訊,預設為true。 單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡
        fetch-registry: true
        service-url:
          defaultZone: http://localhost:7001/eureka
    
  3. 主啟動類添加註解 @EnableEurekaServer@EnableEurekaClient

1.2、Eureka 叢集版使用

  1. server

    # 注意,兩個相互註冊,相互守望
    # 第一個 Eureka
    server:
      port: 7001
    
    eureka:
      instance:
        hostname: eureka7001.com # eureka 服務端的例項名稱
      client:
        # false 表示不向註冊中心註冊自己
        # false 表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要檢索服務
        register-with-eureka: false
        service-url:
          # 設定與Eureka Server 互動的地址查詢服務和註冊服務都需要以來這個地址
          defaultZone: http://eureka7002.com:7002/eureka/
          
    # 第二個 Eureka
    server:
      port: 7002
    
    eureka:
      instance:
        hostname: eureka7002.com # eureka 服務端的例項名稱
      client:
        # false 表示不向註冊中心註冊自己
        # false 表示自己端就是註冊中心,我的職責就是維護服務例項,並不需要檢索服務
        register-with-eureka: false
        service-url:
          # 設定與Eureka Server 互動的地址查詢服務和註冊服務都需要以來這個地址
          defaultZone: http://eureka7001.com:7001/eureka/
    
  2. Client

    # 其他不變,只在 defaultZone 那裡新增兩個 Eureka 
    eureka:
      client:
        # true 表示將自己註冊金 EurekaServer 預設為true
        register-with-eureka: true
        # 是否從 EurekaServer 抓取已有的註冊資訊,預設為true。 單節點無所謂,叢集必須設定為true才能配合ribbon使用負載均衡
        fetch-registry: true
        service-url:
          defaultZone: http://eureka7001.com:7001/eureka, http://eureka7002.com:7002/eureka
          # defaultZone: http://localhost:7001/eureka # 單機版
    
  3. 主啟動類添加註解 @EnableEurekaServer@EnableEurekaClient

  4. @LoadBalanced 給 RestTemplate 新增這個註解 實現負載均衡。