spring boot集成Eureka服務註冊與發現


git 地址
https://github.com/a18792721831/studySpringCloud.git

1. Eureka簡介

1.1 什麼是Eureka

和 Consul、Zookeeper類似,Eureka 是一個用於服務註冊和發現的組件,最開始主要應用於亞馬遜公司旗下的雲計算服務平臺 AWS。Eureka 分爲 Eureka Server和 Eureka Client,Eureka Server 爲Eureka 服務註冊中心,Eureka Client 爲 Eureka客戶端。

1.2 Eureka的基本架構

Eureka的基本架構主要包括以下3種角色。

  • Register Service:服務註冊中心,它是一個Eureka Server,提供服務註冊和發現的功能。
  • Provider Service:服務提供者,它是一個 Eureka Client,提供服務。
  • Consumer Service:服務消費者,它是一個Eureka Cient,消費服務。

服務消費的基本過程如下:首先需要一個服務註冊中心 Eureka Server,服務提供者 Eureka
Client 向服務註冊中心 Eureka Server註冊,將自己的信息(比如服務名和服務的IP地址等)
通過 REST API 的形式提交給服務註冊中心 Eureka Server。同樣,服務消費者 Eureka Client 也
向服務註冊中心 Eureka Server註冊,同時服務消費者獲取一份服務註冊列表的信息,該列表
包含了所有向服務註冊中心 Eureka Server註冊的服務信息。獲取服務註冊列表信息之後,服
務消費者就知道服務提供者的IP地址,可以通過Http遠程調度來消費服務提供者的服務。

2. Eureka Server

2.1 創建Eureka Server

在這裏插入圖片描述
在這裏插入圖片描述

2.2 配置gradle

在這裏插入圖片描述
其項目結構如上圖,.gradle和build的文件夾不需要進行手動創建。
我們使用gradle warpper
在這裏插入圖片描述
然後修改maven倉庫地址

repositories {
    maven{
        url 'https://maven.aliyun.com/'
    }
    maven{
        url 'http://maven.aliyun.com/nexus/content/groups/public/'
    }
    maven{
        url 'https://repo1.maven.org/maven2/'
    }
    mavenCentral()
}

在這裏插入圖片描述
然後等待重新構建(剛創建成功,gradle會從maven的默認倉庫下載依賴,此時下載非常慢,可以手動終止,等待我們添加了其他的倉庫後重新刷新下載依賴。效果很明顯,使用默認倉庫下載一個jar在十幾幾十秒,但是使用國內的倉庫,下載一個jar包只需要不到1秒)

2.3 配置Eureka

創建配置文件application.yml,在resources下
在這裏插入圖片描述

server:
  port: 8761

eureka:
  instance:
    hostname: 127.0.0.1
  client:
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  server:
    enable-self-preservation: false

logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  • 8761是端口(tomcat啓動的端口,對外服務的端口)
  • 127.0.0.1表示eureka訪問的域名
  • 因爲我們構建的是eureka服務端,所以,eureka Server不需要進行註冊,而是eureka Client向eureka Server 進行註冊的,所以需要關閉註冊。即 register-with-eureka和fetch-registry爲false
  • defaultZone是eureka主面板訪問地址。其值進行變量替換後就是http://127.0.0.1:8761/eureka/
  • enable-self-preservation設置爲false是關閉其自我保護機制(後面有說明)
  • logging是配置tomcat日誌打印級別,默認打印信息較少,無法打印tomcat容器發佈了哪些接口,但是設置爲較詳細的日誌級別,可以打印發布哪些接口,這樣就可以從日誌中看出我們的controller是否發佈成功
  • feemarker是重中之重,因爲eureka剛創建成功時,去訪問主面板是無法訪問的,從官網的issues看,是認爲gradle的緩存問題。不過網上有人說增加這些配置,可以解決這一問題。我沒有深入,只是配置這個之後,重新刷新gradle構建,確實可以訪問了。
    接下來在啓動類增加eureka server的註解
    @EnableEurekaServer
    在這裏插入圖片描述

2.4 啓動eureka server

在這裏插入圖片描述
然後在瀏覽器驗證
在這裏插入圖片描述
提示沒有開啓自我保護機制,而且,其註冊的eureka client也是空的。

3. Eureka Client

3.1 創建 Eureka Client

在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
然後與2.2同樣進行配置gradle(這裏其實可以將倉庫配置到root的gradle中,但是貌似不生效,不知道爲什麼,存疑,後續研究gradle時解決。)

3.2 配置Eureka

在這裏插入圖片描述

server:
  port: 8762

eureka:
  client:
#    register-with-eureka: false
#    fetch-registry: false
    service-url:
      defaultZone: http://127.0.0.1:8761/eureka/


logging:
  level:
    org:
      springframework:
        web:
          servlet:
            mvc:
              method:
                annotation:
                  RequestMappingHandlerMapping: trace

spring:
  freemarker:
    template-loader-path: classpath:/templates/
    prefer-file-system-access: false
  application:
    name: eureka-client-test
  • 在 eureka client中需要註銷註冊,默認開啓,因爲eureka client需要向eureka server進行註冊的。
  • defaultZone就是eureka server的註冊地址
  • application:name是eureka client在eureka server面板中展示的名稱
    其餘配置與eureka server配置相同。
    當然,其註解是client
    在這裏插入圖片描述

3.3 啓動eureka client

請注意,如果需要同時啓動多個tomcat容器在一個idea中,需要在run dash board面板中。
在這裏插入圖片描述
正常情況下,會自動彈出提示,配置是否展示run dashboard。如果沒有彈出,請百度。
此時刷新eureka面板
在這裏插入圖片描述

3.4 eureka client 服務發佈者

在eureka中有三個角色:
eureka server
eureka client 服務發佈者(服務提供者)
eureka client 服務消費則(服務調用者)

我們創建了eureka server和一個eureka client,並且需要將這個eureka client作爲服務提供者,對外提供接口。
所以,我們需要創建controller
在這裏插入圖片描述
controller提供了兩個接口,分別是hi和hello接口,返回String,並且get訪問
在這裏插入圖片描述
接口自測
在這裏插入圖片描述
在這裏插入圖片描述

4. eureka的一點思考

在學習eureka的時候,我學習到這裏,其實有一個疑問,我們創建了eureka server,eureka client並且提供了兩個接口。那麼,eureka cleint的調用者呢。
就是我們創建了對外接口,並且將對外接口以及接口服務器的信息放到了eureka server中,且所有的eureka集羣都有這些信息,那麼是怎麼調用的呢?
這一塊在後面的一個框架中,這個框架暫時實現了,提供一個平臺,用於服務器的註冊,以及相關信息的記錄,並保證所有的服務器信息共享。
調用的是Ribbon,Ribbon使用服務器信息進行遠程調用,當然,遠遠不止,一些網關路由,負載均衡,熔斷機制,都和服務註冊與發現有關。
這裏存疑。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章