SpringCloud學習第一篇:服務的註冊與發現Eureka(Hoxton.SR4)

一、Eureka服務端

官方文檔

  • 引入maven依賴
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
        </dependency>
    </dependencies>
  • 激活eureka服務
@SpringBootApplication
/**
 * 激活eureka服務
 */
@EnableEurekaServer
public class StartApplication {
    public static void main(String[] args) {
        SpringApplication.run(StartApplication.class, args);
    }
}
  • 配置eureka
# Tomcat
server:
  port: 1101
spring:
  application:
    name: eureka-server
eureka:
  client:
    # 讓自己不需要註冊在上面禁止客戶端註冊,表明自己是一個eureka server
    register-with-eureka: false
    fetch-registry: false
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/
  instance:
    hostname: localhost
  • 啓動
    在這裏插入圖片描述

如果在配置eureka的時候沒有加上register-with-eureka: false、fetch-registry: false,啓動過一小會,會看到控制檯報錯。但是不影響運行
在這裏插入圖片描述
通過異常信息可以看出:是因爲eureka Server既是服務器也是客戶端。默認也是需要配置註冊中心地址。爲什麼是在啓動之後報錯,因爲存在一個心跳檢測機制。

二、Eureka客戶端

  • 引入maven依賴
    <dependencies>
        <dependency>
            <groupId>org.springframework.cloud</groupId>
            <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
        </dependency>
    </dependencies>
  • 激活eureka客戶端
@EnableEurekaClient   //只能是Eureka
//@EnableDiscoveryClient   可以是其他註冊中心。如zookeeper、Consul
@SpringBootApplication
public class StartApplication {
    public static void main(String[] args) {
        SpringApplication.run(StartApplication.class, args);
    }
}
  • 配置eureka客戶端
server:
  port: 1102


spring:
  application:
    name: eureka-client
    
eureka:
  client:
    service-url:
      #註冊地址
      defaultZone: http://localhost:1101/eureka/
  #顯示服務器IP加端口
  instance:
    hostname: localhost
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

  • 啓動服務端和客戶端
    在這裏插入圖片描述

三、Eureka服務的高可用

3.1註冊中心的相互註冊

  • 服務端配置
    是在上面演示的服務端上修改的代碼

通過idea可以啓動不端口的兩個項目,首先啓動完第一個之後。按照
在這裏插入圖片描述

在這裏插入圖片描述
  這樣就可以啓動兩個實例
3.2客戶端註冊兩個註冊中心

  • 客戶端配置
eureka:
  client:
    service-url:
# 註冊到註冊中心
      defaultZone: http://localhost:1101/eureka/,http://localhost:803/eureka/
  #顯示服務器IP加端口
  instance:
    hostname: localhost
    prefer-ip-address: true
    instance-id: ${spring.cloud.client.ip-address}:${server.port}

3.3實現高可用
  如果Eureka客戶端配置多個Eureka註冊服務器,那麼默認情況只有第一臺註冊服務器上面會顯示客戶端信息。當第一臺可用的註冊服務器Down掉之後,那麼客戶端應用纔會選擇下一個臺可用的註冊服務器
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述

  • 這個時候關掉第一臺註冊服務器
    在這裏插入圖片描述
    在這裏插入圖片描述
    可以看到客戶端會自動重試,然後尋找下一臺註冊服務器
    在這裏插入圖片描述
  • 修改Client獲取元信息的時間間隔和同步間隔
    在這裏插入圖片描述
    默認30秒,可以通過eureka.client.registryFetchIntervalSeconds:、eureka.client.instanceInfoReplicationIntervalSeconds:這兩個來設置獲取應用元信息時間間隔和同步時間間隔。

四、參數配置(需要駝峯)

  • eureka客戶端配置參數
 1、RegistryFetchIntervalSeconds

      從eureka服務器註冊表中獲取註冊信息的時間間隔(s),默認爲30秒

      2、InstanceInfoReplicationIntervalSeconds

      複製實例變化信息到eureka服務器所需要的時間間隔(s),默認爲30秒

      3、InitialInstanceInfoReplicationIntervalSeconds

      最初複製實例信息到eureka服務器所需的時間(s),默認爲40秒

      4、EurekaServiceUrlPollIntervalSeconds

      詢問Eureka服務url信息變化的時間間隔(s),默認爲300秒

      5、ProxyHost

      獲取eureka服務的代理主機,默認爲null

      6、ProxyProxyPort

      獲取eureka服務的代理端口, 默認爲null 

       7、ProxyUserName

      獲取eureka服務的代理用戶名,默認爲null

       8、ProxyPassword

      獲取eureka服務的代理密碼,默認爲null 

       9、GZipContent

       eureka註冊表的內容是否被壓縮,默認爲true,並且是在最好的網絡流量下被壓縮

      10、EurekaServerReadTimeoutSeconds

      eureka需要超時讀取之前需要等待的時間,默認爲8秒

      11、EurekaServerConnectTimeoutSeconds

      eureka需要超時連接之前需要等待的時間,默認爲5秒

      12、BackupRegistryImpl

      獲取實現了eureka客戶端在第一次啓動時讀取註冊表的信息作爲回退選項的實現名稱

      13、EurekaServerTotalConnections

       eureka客戶端允許所有eureka服務器連接的總數目,默認是200

       14、EurekaServerTotalConnectionsPerHost

       eureka客戶端允許eureka服務器主機連接的總數目,默認是50

       15、EurekaServerURLContext

       表示eureka註冊中心的路徑,如果配置爲eureka,則爲http://x.x.x.x:x/eureka/,在eureka的配置文件中加入此配置表示eureka作爲客戶端向註冊中心註冊,從而構成eureka集羣。此配置只有在eureka服務器ip地址列表是在DNS中才會用到,默認爲null

       16、EurekaServerPort

       獲取eureka服務器的端口,此配置只有在eureka服務器ip地址列表是在DNS中才會用到。默認爲null

       17、EurekaServerDNSName

       獲取要查詢的DNS名稱來獲得eureka服務器,此配置只有在eureka服務器ip地址列表是在DNS中才會用到。默認爲null

       18、UseDnsForFetchingServiceUrls

       eureka客戶端是否應該使用DNS機制來獲取eureka服務器的地址列表,默認爲false

       19、RegisterWithEureka

       實例是否在eureka服務器上註冊自己的信息以供其他服務發現,默認爲true

       20、PreferSameZoneEureka

       實例是否使用同一zone裏的eureka服務器,默認爲true,理想狀態下,eureka客戶端與服務端是在同一zone下

       21、AllowRedirects

       服務器是否能夠重定向客戶端請求到備份服務器。 如果設置爲false,服務器將直接處理請求,如果設置爲true,它可能發送HTTP重定向到客戶端。默認爲false

       22、LogDeltaDiff

       是否記錄eureka服務器和客戶端之間在註冊表的信息方面的差異,默認爲false

       23、DisableDelta(*)

       默認爲false

       24、fetchRegistryForRemoteRegions

       eureka服務註冊表信息裏的以逗號隔開的地區名單,如果不這樣返回這些地區名單,則客戶端啓動將會出錯。默認爲null

       25、Region

       獲取實例所在的地區。默認爲us-east-1

       26、AvailabilityZones

       獲取實例所在的地區下可用性的區域列表,用逗號隔開。

       27、EurekaServerServiceUrls

       Eureka服務器的連接,默認爲http://XXXX:X/eureka/,但是如果採用DNS方式獲取服務地址,則不需要配置此設置。

       28、FilterOnlyUpInstances(*)

       是否獲得處於開啓狀態的實例的應用程序過濾之後的應用程序。默認爲true

       29、EurekaConnectionIdleTimeoutSeconds

       Eureka服務的http請求關閉之前其響應的時間,默認爲30 秒

       30、FetchRegistry

       此客戶端是否獲取eureka服務器註冊表上的註冊信息,默認爲true

       31、RegistryRefreshSingleVipAddress

       此客戶端只對一個單一的VIP註冊表的信息感興趣。默認爲null

       32、HeartbeatExecutorThreadPoolSize(*)

       心跳執行程序線程池的大小,默認爲5

       33、HeartbeatExecutorExponentialBackOffBound(*)

       心跳執行程序回退相關的屬性,是重試延遲的最大倍數值,默認爲10

       34、CacheRefreshExecutorThreadPoolSize(*)

       執行程序緩存刷新線程池的大小,默認爲5

       35、CacheRefreshExecutorExponentialBackOffBound

       執行程序指數回退刷新的相關屬性,是重試延遲的最大倍數值,默認爲10

       36、DollarReplacement

       eureka服務器序列化/反序列化的信息中獲取“$”符號的的替換字符串。默認爲“_-”

       37、EscapeCharReplacement

       eureka服務器序列化/反序列化的信息中獲取“_”符號的的替換字符串。默認爲“__”

       38、OnDemandUpdateStatusChange(*)

       如果設置爲true,客戶端的狀態更新將會點播更新到遠程服務器上,默認爲true

       39、EncoderName

       這是一個短暫的編碼器的配置,如果最新的編碼器是穩定的,則可以去除,默認爲null

       40、DecoderName

       這是一個短暫的解碼器的配置,如果最新的解碼器是穩定的,則可以去除,默認爲null

       41、ClientDataAccept(*)

       客戶端數據接收

       42、Experimental(*)

       當嘗試新功能遷移過程時,爲了避免配置API污染,相應的配置即可投入實驗配置部分,默認爲null
  • eureka服務端配置
 1、AWSAccessId

       獲取aws訪問的id,主要用於彈性ip綁定,此配置是用於aws上的,默認爲null

       2、AWSSecretKey

       獲取aws私有祕鑰,主要用於彈性ip綁定,此配置是用於aws上的,默認爲null

       3、EIPBindRebindRetries

       獲取服務器嘗試綁定到候選的EIP的次數,默認爲3

       4、EIPBindingRetryIntervalMsWhenUnbound(*)

       服務器檢查ip綁定的時間間隔,單位爲毫秒,默認爲1 * 60 * 1000

       5、EIPBindingRetryIntervalMs

       與上面的是同一作用,僅僅是穩定狀態檢查,默認爲5 * 60 * 1000

       6、EnableSelfPreservation

       自我保護模式,當出現出現網絡分區、eureka在短時間內丟失過多客戶端時,會進入自我保護模式,即一個服務長時間沒有發送心跳,eureka也不會將其刪除,默認爲true

       7、RenewalPercentThreshold(*)

       閾值因子,默認是0.85,如果閾值比最小值大,則自我保護模式開啓

       8、RenewalThresholdUpdateIntervalMs

       閾值更新的時間間隔,單位爲毫秒,默認爲15 * 60 * 1000

       9、PeerEurekaNodesUpdateIntervalMs(*)

       集羣裏eureka節點的變化信息更新的時間間隔,單位爲毫秒,默認爲10 * 60 * 1000

       10、EnableReplicatedRequestCompression

       複製的數據在發送請求時是否被壓縮,默認爲false

       11、NumberOfReplicationRetries

       獲取集羣裏服務器嘗試複製數據的次數,默認爲5

       12、PeerEurekaStatusRefreshTimeIntervalMs

       服務器節點的狀態信息被更新的時間間隔,單位爲毫秒,默認爲30 * 1000

       13、WaitTimeInMsWhenSyncEmpty(*)

       在Eureka服務器獲取不到集羣裏對等服務器上的實例時,需要等待的時間,單位爲毫秒,默認爲1000 * 60 * 5

       14、PeerNodeConnectTimeoutMs

       連接對等節點服務器複製的超時的時間,單位爲毫秒,默認爲200

       15、PeerNodeReadTimeoutMs

       讀取對等節點服務器複製的超時的時間,單位爲毫秒,默認爲200

       16、PeerNodeTotalConnections

       獲取對等節點上http連接的總數,默認爲1000

       17、PeerNodeTotalConnectionsPerHost(*)

       獲取特定的對等節點上http連接的總數,默認爲500

       18、PeerNodeConnectionIdleTimeoutSeconds(*)

       http連接被清理之後服務器的空閒時間,默認爲30秒

       19、RetentionTimeInMSInDeltaQueue(*)

       客戶端保持增量信息緩存的時間,從而保證不會丟失這些信息,單位爲毫秒,默認爲3 * 60 * 1000

       20、DeltaRetentionTimerIntervalInMs

       清理任務程序被喚醒的時間間隔,清理過期的增量信息,單位爲毫秒,默認爲30 * 1000

       21、EvictionIntervalTimerInMs

       過期實例應該啓動並運行的時間間隔,單位爲毫秒,默認爲60 * 1000

       22、ASGQueryTimeoutMs(*)

       查詢AWS上ASG(自動縮放組)信息的超時值,單位爲毫秒,默認爲300

       23、ASGUpdateIntervalMs

       從AWS上更新ASG信息的時間間隔,單位爲毫秒,默認爲5 * 60 * 1000

       24、ASGCacheExpiryTimeoutMs(*)

       緩存ASG信息的到期時間,單位爲毫秒,默認爲10 * 60 * 1000

       25、ResponseCacheAutoExpirationInSeconds(*)

       當註冊表信息被改變時,則其被保存在緩存中不失效的時間,默認爲180秒

       26、ResponseCacheUpdateIntervalMs(*)

       客戶端的有效負載緩存應該更新的時間間隔,默認爲30 * 1000毫秒

       27、UseReadOnlyResponseCache(*)

       目前採用的是二級緩存策略,一個是讀寫高速緩存過期策略,另一個沒有過期只有只讀緩存,默認爲true,表示只讀緩存

       28、DisableDelta(*)

       增量信息是否可以提供給客戶端看,默認爲false

       29、MaxIdleThreadInMinutesAgeForStatusReplication(*)

       狀態複製線程可以保持存活的空閒時間,默認爲10分鐘

       30、MinThreadsForStatusReplication

       被用於狀態複製的線程的最小數目,默認爲1

       31、MaxThreadsForStatusReplication

       被用於狀態複製的線程的最大數目,默認爲1

       32、MaxElementsInStatusReplicationPool

       可允許的狀態複製池備份複製事件的最大數量,默認爲10000

       33、SyncWhenTimestampDiffers

       當時間變化實例是否跟着同步,默認爲true

       34、RegistrySyncRetries

       當eureka服務器啓動時嘗試去獲取集羣裏其他服務器上的註冊信息的次數,默認爲5

       35、RegistrySyncRetryWaitMs

       當eureka服務器啓動時獲取其他服務器的註冊信息失敗時,會再次嘗試獲取,期間需要等待的時間,默認爲30 * 1000毫秒

       36、MaxElementsInPeerReplicationPool(*)

       複製池備份複製事件的最大數量,默認爲10000

       37、MaxIdleThreadAgeInMinutesForPeerReplication(*)

       複製線程可以保持存活的空閒時間,默認爲15分鐘

       38、MinThreadsForPeerReplication(*)

       獲取將被用於複製線程的最小數目,默認爲5

       39、MaxThreadsForPeerReplication

       獲取將被用於複製線程的最大數目,默認爲20

       40、MaxTimeForReplication(*)

       嘗試在丟棄複製事件之前進行復制的時間,默認爲30000毫秒

       41、PrimeAwsReplicaConnections(*)

       對集羣中服務器節點的連接是否應該準備,默認爲true

       42、DisableDeltaForRemoteRegions(*)

       增量信息是否可以提供給客戶端或一些遠程地區,默認爲false

       43、RemoteRegionConnectTimeoutMs(*)

       連接到對等遠程地eureka節點的超時時間,默認爲1000毫秒

       44、RemoteRegionReadTimeoutMs(*)

       獲取從遠程地區eureka節點讀取信息的超時時間,默認爲1000毫秒

       45、RemoteRegionTotalConnections

       獲取遠程地區對等節點上http連接的總數,默認爲1000

       46、RemoteRegionTotalConnectionsPerHost

       獲取遠程地區特定的對等節點上http連接的總數,默認爲500

       47、RemoteRegionConnectionIdleTimeoutSeconds

       http連接被清理之後遠程地區服務器的空閒時間,默認爲30秒

       48、GZipContentFromRemoteRegion(*)

       eureka服務器中獲取的內容是否在遠程地區被壓縮,默認爲true

       49、RemoteRegionUrlsWithName

       針對遠程地區發現的網址域名的map

       50、RemoteRegionUrls

       遠程地區的URL列表

       51、RemoteRegionAppWhitelist(*)

       必須通過遠程區域中檢索的應用程序的列表

       52、RemoteRegionRegistryFetchInterval

       從遠程區域取出該註冊表的信息的時間間隔,默認爲30秒

       53、RemoteRegionFetchThreadPoolSize

       用於執行遠程區域註冊表請求的線程池的大小,默認爲20

       54、RemoteRegionTrustStore

       用來合格請求遠程區域註冊表的信任存儲文件,默認爲空

       55、RemoteRegionTrustStorePassword

       獲取偏遠地區信任存儲文件的密碼,默認爲“changeit”

       56、disableTransparentFallbackToOtherRegion(*)

       如果在遠程區域本地沒有實例運行,對於應用程序回退的舊行爲是否被禁用, 默認爲false

       57、BatchReplication(*)

       表示集羣節點之間的複製是否爲了網絡效率而進行批處理,默認爲false

       58、LogIdentityHeaders(*)

       Eureka服務器是否應該登錄clientAuthHeaders,默認爲true

       59、RateLimiterEnabled

       限流是否應啓用或禁用,默認爲false

       60、RateLimiterThrottleStandardClients

       是否對標準客戶端進行限流,默認false

       61、RateLimiterPrivilegedClients(*)

       認證的客戶端列表,這裏是除了標準的eureka Java客戶端。

       62、RateLimiterBurstSize(*)

       速率限制的burst size ,默認爲10,這裏用的是令牌桶算法

       63、RateLimiterRegistryFetchAverageRate(*)

       速率限制器用的是令牌桶算法,此配置指定平均執行註冊請求速率,默認爲500

       64、RateLimiterFullFetchAverageRate(*)

       速率限制器用的是令牌桶算法,此配置指定平均執行請求速率,默認爲100

       65、ListAutoScalingGroupsRoleName(*)

       用來描述從AWS第三賬戶的自動縮放組中的角色名稱,默認爲“ListAutoScalingGroups”

       66、JsonCodecName(*)

       如果沒有設置默認的編解碼器將使用全JSON編解碼器,獲取的是編碼器的類名稱

       67、XmlCodecName(*)

       如果沒有設置默認的編解碼器將使用xml編解碼器,獲取的是編碼器的類名稱

       68、BindingStrategy(*)

       獲取配置綁定EIP或Route53的策略。

       69、Route53DomainTTL(*)

       用於建立route53域的ttl,默認爲301

       70、Route53BindRebindRetries(*)

       服務器嘗試綁定到候選Route53域的次數,默認爲3

       71、Route53BindingRetryIntervalMs(*)

       服務器應該檢查是否和Route53域綁定的時間間隔,默認爲5 * 60 * 1000毫秒

       72、Experimental(*)

       當嘗試新功能遷移過程時,爲了避免配置API污染,相應的配置即可投入實驗配置部分,默認爲null
  • eureka實例微服務端配置 (instance)
 1、InstanceId

       此實例註冊到eureka服務端的唯一的實例ID,其組成爲${spring.application.name}:${spring.application.instance_id:${random.value}}

       2、Appname

       獲得在eureka服務上註冊的應用程序的名字,默認爲unknow

       3、AppGroupName

       獲得在eureka服務上註冊的應用程序組的名字,默認爲unknow

       4、InstanceEnabledOnit(*)

       實例註冊到eureka服務器時,是否開啓通訊,默認爲false

       5、NonSecurePort

       獲取該實例應該接收通信的非安全端口。默認爲80

       6、SecurePort

       獲取該實例應該接收通信的安全端口,默認爲443

       7、NonSecurePortEnabled

       該實例應該接收通信的非安全端口是否啓用,默認爲true

       8、SecurePortEnabled

       該實例應該接收通信的安全端口是否啓用,默認爲false

       9、LeaseRenewalIntervalInSeconds

       eureka客戶需要多長時間發送心跳給eureka服務器,表明它仍然活着,默認爲3010、LeaseExpirationDurationInSeconds

       Eureka服務器在接收到實例的最後一次發出的心跳後,需要等待多久纔可以將此實例刪除,默認爲9011、VirtualHostName

       此實例定義的虛擬主機名,其他實例將通過使用虛擬主機名找到該實例。

       12、SecureVirtualHostName

       此實例定義的安全虛擬主機名

       13、ASGName(*)

       與此實例相關聯 AWS自動縮放組名稱。此項配置是在AWS環境專門使用的實例啓動,它已被用於流量停用後自動把一個實例退出服務。

       14、HostName

       與此實例相關聯的主機名,是其他實例可以用來進行請求的準確名稱

       15MetadataMap(*)

       獲取與此實例相關聯的元數據(key,value)。這個信息被髮送到eureka服務器,其他實例可以使用。

       16、DataCenterInfo(*)

       該實例被部署在數據中心

       17、IpAddress

       獲取實例的ip地址

       18、StatusPageUrlPath(*)

       獲取此實例狀態頁的URL路徑,然後構造出主機名,安全端口等,默認爲/info

       19StatusPageUrl(*)

       獲取此實例絕對狀態頁的URL路徑,爲其他服務提供信息時來找到這個實例的狀態的路徑,默認爲null

       20、HomePageUrlPath(*)

       獲取此實例的相關主頁URL路徑,然後構造出主機名,安全端口等,默認爲/

       21HomePageUrl(*)

       獲取此實例的絕對主頁URL路徑,爲其他服務提供信息時使用的路徑,默認爲null

       22、HealthCheckUrlPath

       獲取此實例的相對健康檢查URL路徑,默認爲/health

       23、HealthCheckUrl

       獲取此實例的絕對健康檢查URL路徑,默認爲null

       24、SecureHealthCheckUrl

       獲取此實例的絕對安全健康檢查網頁的URL路徑,默認爲null

       25、DefaultAddressResolutionOrder

       獲取實例的網絡地址,默認爲[]

       26、Namespace

       獲取用於查找屬性的命名空間,默認爲eureka
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章