【Eureka】服務端和客戶端
轉載:https://www.cnblogs.com/yangchongxing/p/10778357.html
Eureka服務端
1、添加依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>ycx</groupId> <artifactId>eureka-server</artifactId> <version>0.0.1-SNAPSHOT</version> <name>eureka-server</name> <description>Demo project for Spring Boot</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencies> <!-- spring boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId> </dependency> <!-- other --> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、啟用Eureka服務
package ycx.eureka; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.server.EnableEurekaServer; @EnableEurekaServer @SpringBootApplication public class EurekaServerApplication { public static void main(String[] args) { SpringApplication.run(EurekaServerApplication.class, args); } }
3、配置Eureka
spring: application: name: eureka-server server: port: 8761 eureka: instance: prefer-ip-address: true client: register-with-eureka: false fetch-registry: false service-url: default-zone: http://eureka.ycx.com:8761/eureka
Eureka客戶端
1、添加依賴
<?xml version="1.0" encoding="UTF-8"?> <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <parent> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-parent</artifactId> <version>2.1.4.RELEASE</version> <relativePath/> <!-- lookup parent from repository --> </parent> <groupId>ycx</groupId> <version>0.0.1-SNAPSHOT</version> <artifactId>admin-server</artifactId> <name>admin-server</name> <description>sc server</description> <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencies> <!-- spring boot --> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-test</artifactId> <scope>test</scope> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <!-- spring cloud --> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId> </dependency> <!-- other --> <dependency> <groupId>org.projectlombok</groupId> <artifactId>lombok</artifactId> <optional>true</optional> </dependency> </dependencies> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-maven-plugin</artifactId> </plugin> </plugins> </build> </project>
2、啟用服務發現,僅僅 Eureka 使用 @EnableEurekaClient,其他的服務發現代理使用 @EnableDiscoveryClient
package ycx.admin; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cloud.netflix.eureka.EnableEurekaClient; @EnableEurekaClient @SpringBootApplication public class AdminServerApplication { public static void main(String[] args) { SpringApplication.run(AdminServerApplication.class, args); } }
3、配置服務發現
spring: application: name: admin-server server: port: 0 eureka: instance: prefer-ip-address: true client: register-with-eureka: true fetch-registry: true service-url: default-zone: http://eureka.ycx.com:8761/eureka
配置信息,參考:https://www.cnblogs.com/tiancai/p/9593648.html
Eureka Instance配置信息
全部保存在org.springframework.cloud.netflix.eureka.EurekaInstanceConfigBean配置類里,實際上它是com.netflix.appinfo.EurekaInstanceConfig的實現類,替代了netflix的com.netflix.appinfo.CloudInstanceConfig的默認實現。
appname = unknown 應用名,首先獲取spring.application.name的值,如果取值為空,則取默認unknown。 appGroupName = null 應用組名 instanceEnabledOnit = false 實例注冊到Eureka上是,是否立刻開啟通訊。有時候應用在准備好服務之前需要一些預處理。 nonSecurePort = 80 非安全的端口 securePort = 443 安全端口 nonSecurePortEnabled = true 是否開啟非安全端口通訊 securePortEnabled = false 是否開啟安全端口通訊 leaseRenewalIntervalInSeconds = 30 實例續約間隔時間 leaseExpirationDurationInSeconds = 90 實例超時時間,表示最大leaseExpirationDurationInSeconds秒后沒有續約,Server就認為他不可用了,隨之就會將其剔除。 virtualHostName = unknown 虛擬主機名,首先獲取spring.application.name的值,如果取值為空,則取默認unknown。 instanceId 注冊到eureka上的唯一實例ID,不能與相同appname的其他實例重復。 secureVirtualHostName = unknown 安全虛擬主機名,首先獲取spring.application.name的值,如果取值為空,則取默認unknown。 metadataMap = new HashMap(); 實例元數據,可以供其他實例使用。比如spring-boot-admin在監控時,獲取實例的上下文和端口。 dataCenterInfo = new MyDataCenterInfo(DataCenterInfo.Name.MyOwn); 實例部署的數據中心。如AWS、MyOwn。 ipAddress=null 實例的IP地址 statusPageUrlPath = "/actuator/info" 實例狀態頁相對url statusPageUrl = null 實例狀態頁絕對URL homePageUrlPath = "/" 實例主頁相對URL homePageUrl = null 實例主頁絕對URL healthCheckUrlUrlPath = "/actuator/health" 實例健康檢查相對URL healthCheckUrl = null 實例健康檢查絕對URL secureHealthCheckUrl = null 實例安全的健康檢查絕對URL namespace = "eureka" 配置屬性的命名空間(Spring Cloud中被忽略) hostname = null 主機名,不配置的時候講根據操作系統的主機名來獲取 preferIpAddress = false 是否優先使用IP地址作為主機名的標識
Eureka Client客戶配置信息
配置全部在org.springframework.cloud.netflix.eureka.EurekaClientConfigBean中,實際上它是com.netflix.discovery.EurekaClientConfig的實現類,替代了netxflix的默認實現。
enabled=true 是否啟用Eureka client。 registryFetchIntervalSeconds=30 定時從Eureka Server拉取服務注冊信息的間隔時間 instanceInfoReplicationIntervalSeconds=30 定時將實例信息(如果變化了)復制到Eureka Server的間隔時間。(InstanceInfoReplicator線程) initialInstanceInfoReplicationIntervalSeconds=40 首次將實例信息復制到Eureka Server的延遲時間。(InstanceInfoReplicator線程) eurekaServiceUrlPollIntervalSeconds=300 拉取Eureka Server地址的間隔時間(Eureka Server有可能增減) proxyPort=null Eureka Server的代理端口 proxyHost=null Eureka Server的代理主機名 proxyUserName=null Eureka Server的代理用戶名 proxyPassword=null Eureka Server的代理密碼 eurekaServerReadTimeoutSeconds=8 從Eureka Server讀取信息的超時時間 eurekaServerConnectTimeoutSeconds=5 連接Eureka Server的超時時間 backupRegistryImpl=null Eureka Client第一次啟動時獲取服務注冊信息的調用的回溯實現。Eureka Client啟動時首次會檢查有沒有BackupRegistry的實現類,如果有實現類,則優先從這個實現類里獲取服務注冊信息。 eurekaServerTotalConnections=200 Eureka client連接Eureka Server的鏈接總數 eurekaServerTotalConnectionsPerHost=50 Eureka client連接單台Eureka Server的鏈接總數 eurekaServerURLContext=null 當Eureka server的列表在DNS中時,Eureka Server的上下文路徑。如http://xxxx/eureka。 eurekaServerPort=null 當Eureka server的列表在DNS中時,Eureka Server的端口。 eurekaServerDNSName=null 當Eureka server的列表在DNS中時,且要通過DNSName獲取Eureka Server列表時,DNS名字。 region="us-east-1" 實例所屬區域。 eurekaConnectionIdleTimeoutSeconds = 30 Eureka Client和Eureka Server之間的Http連接的空閑超時時間。 heartbeatExecutorThreadPoolSize=2 心跳(續約)執行器線程池大小。 heartbeatExecutorExponentialBackOffBound=10 心跳執行器在續約過程中超時后的再次執行續約的最大延遲倍數。默認最大延遲時間=10 * eureka.instance.leaseRenewalIntervalInSeconds cacheRefreshExecutorThreadPoolSize=2 cacheRefreshExecutord的線程池大小(獲取注冊信息) cacheRefreshExecutorExponentialBackOffBound=10 cacheRefreshExecutord的再次執行的最大延遲倍數。默認最大延遲時間=10 *eureka.client.registryFetchIntervalSeconds serviceUrl= new HashMap();serviceUrl.put(DEFAULT_ZONE, DEFAULT_URL); Eureka Server的分區地址。默認添加了一個defualtZone。也就是最常用的配置eureka.client.service-url.defaultZone=xxx registerWithEureka=true 是否注冊到Eureka Server。 preferSameZoneEureka=true 是否使用相同Zone下的Eureka server。 logDeltaDiff=false 是否記錄Eureka Server和Eureka Client之間注冊信息的差異 disableDelta=false 是否開啟增量同步注冊信息。 fetchRemoteRegionsRegistry=null 獲取注冊服務的遠程地區,以逗號隔開。 availabilityZones=new HashMap() 可用分區列表。用逗號隔開。 filterOnlyUpInstances = true 是否只拉取UP狀態的實例。 fetchRegistry=true 是否拉取注冊信息。 shouldUnregisterOnShutdown = true 是否在停止服務的時候向Eureka Server發起Cancel指令。 shouldEnforceRegistrationAtInit = false 是否在初始化過程中注冊服務。
Eureka Server注冊中心配置信息
Eureka Server注冊中心端的配置是對注冊中心的特性配置。Eureka Server的配置全部在org.springframework.cloud.netflix.eureka.server.EurekaServerConfigBean里,實際上它是com.netflix.eureka.EurekaServerConfig的實現類,替代了netflix的默認實現。
enableSelfPreservation=true 是否開啟自我保護 renewalPercentThreshold = 0.85 自我保護續約百分比閥值因子。如果實際續約數小於續約數閥值,則開啟自我保護 renewalThresholdUpdateIntervalMs = 15 * 60 * 1000 續約數閥值更新頻率。 peerEurekaNodesUpdateIntervalMs = 10 * 60 * 1000 Eureka Server節點更新頻率。 enableReplicatedRequestCompression = false 是否啟用復制請求壓縮。 waitTimeInMsWhenSyncEmpty=5 * 60 * 1000 當從其他節點同步實例信息為空時等待的時間。 peerNodeConnectTimeoutMs=200 節點間連接的超時時間。 peerNodeReadTimeoutMs=200 節點間讀取信息的超時時間。 peerNodeTotalConnections=1000 節點間連接總數。 peerNodeTotalConnectionsPerHost = 500; 單個節點間連接總數。 peerNodeConnectionIdleTimeoutSeconds = 30; 節點間連接空閑超時時間。 retentionTimeInMSInDeltaQueue = 3 * MINUTES; 增量隊列的緩存時間。 deltaRetentionTimerIntervalInMs = 30 * 1000; 清理增量隊列中過期的頻率。 evictionIntervalTimerInMs = 60 * 1000; 剔除任務頻率。 responseCacheAutoExpirationInSeconds = 180; 注冊列表緩存超時時間(當注冊列表沒有變化時) responseCacheUpdateIntervalMs = 30 * 1000; 注冊列表緩存更新頻率。 useReadOnlyResponseCache = true; 是否開啟注冊列表的二級緩存。 disableDelta=false。 是否為client提供增量信息。 maxThreadsForStatusReplication = 1; 狀態同步的最大線程數。 maxElementsInStatusReplicationPool = 10000; 狀態同步隊列的最大容量。 syncWhenTimestampDiffers = true; 當時間差異時是否同步。 registrySyncRetries = 0; 注冊信息同步重試次數。 registrySyncRetryWaitMs = 30 * 1000; 注冊信息同步重試期間的時間間隔。 maxElementsInPeerReplicationPool = 10000; 節點間同步事件的最大容量。 minThreadsForPeerReplication = 5; 節點間同步的最小線程數。 maxThreadsForPeerReplication = 20; 節點間同步的最大線程數。 maxTimeForReplication = 30000; 節點間同步的最大時間,單位為毫秒。 disableDeltaForRemoteRegions = false; 是否啟用遠程區域增量。 remoteRegionConnectTimeoutMs = 1000; 遠程區域連接超時時間。 remoteRegionReadTimeoutMs = 1000; 遠程區域讀取超時時間。 remoteRegionTotalConnections = 1000; 遠程區域最大連接數 remoteRegionTotalConnectionsPerHost = 500; 遠程區域單機連接數 remoteRegionConnectionIdleTimeoutSeconds = 30; 遠程區域連接空閑超時時間。 remoteRegionRegistryFetchInterval = 30; 遠程區域注冊信息拉取頻率。 remoteRegionFetchThreadPoolSize = 20; 遠程區域注冊信息線程數。
Eureka Server注冊中心儀表盤配置
path="/" 儀表盤訪問路徑 enabled=true 是否啟用儀表盤