1. 程式人生 > >服務註冊中心:Eureka

服務註冊中心:Eureka

第一章 註冊中心介紹

1.1、什麼是註冊中心

註冊中心可以說是微服務架構中的“通訊錄”,它記錄了服務和服務地址的對映關係。在分散式系統中,服務會註冊到這裡,當服務需要呼叫其它服務時,就到這裡找到服務的地址,進行呼叫。簡單的來說:服務註冊中心的作用就是服務的註冊和服務的發現。

1.2、為啥用註冊中心

瞭解了什麼是註冊中心,那麼我們繼續談談,為什麼需要註冊中心。在分散式系統中,我們不僅僅是需要在註冊中心找到服務和服務地址的對映關係這麼簡單,我們還需要考慮更多更復雜的問題:

  • 服務註冊後,如何及時發現
  • 服務宕機後,如何及時下線
  • 服務發現時,如何進行路由
  • 服務異常時,如何進行降級
  • 服務如何有效的水平擴充套件

這些問題的解決都依賴於註冊中心。簡單來看,注 冊中心的功能有點類似於 DNS 伺服器或者負載均衡器,而實際上,註冊中心作為微服務的基礎元件,可能要更加複雜,也需要更多的靈活性和時效性。所以,我們還需要學習更多 Spring Cloud 微服務元件協同完成應用開發。

1.3、常見的註冊中心

特性Eureka(會用)Nacos(重點)Consul(瞭解)Zookeeper(瞭解)
CAP AP CP + AP CP CP
健康檢查 Client Beat TCP/HTTP/MYSQL/Client Beat TCP/HTTP/gRPC/Cmd Keep Alive
雪崩保護
自動登出例項 支援 支援 不支援 支援
訪問協議 HTTP HTTP/DNS HTTP/DNS TCP
監聽支援 支援 支援 支援 支援
多資料中心 支援 支援 支援 不支援
跨註冊中心同步 不支援 支援 支援 不支援
SpringCloud整合 支援 支援 支援 支援

第二章 Eureka介紹

2.1、Eureka的介紹

Eureka 是 Netflix 開發的服務發現元件,本身是一個基於 REST 的服務。Spring Cloud 將它整合在其子專案 Spring Cloud Netflix 中,實現 Spring Cloud 的服務註冊與發現,同時還提供了負載均衡、故障轉移等能力。

2.2、Eureka的三種角色

  • Eureka Server:通過 Register、Get、Renew 等介面提供服務的註冊和發現。
  • Service Provider:服務提供方,把自身的服務例項註冊到 Eureka Server 中。
  • Service Consumer:服務呼叫方,通過 Eureka Server 獲取服務列表,消費服務。

2.3、Eureka的執行流程

第三章 Eureka入門案例

3.1、建立註冊中心

(1)在spring-cloud-study下建立一個子模組,名稱叫:eureka-server7001

(2)在eureka-server7001的pom.xml中,新增以下依賴資訊

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-server</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>    
</dependencies>

(3)建立一個配置檔案,名字叫application.yaml,然後把以下這段配置拷貝進去

server:
  port: 7001

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: eureka-server

eureka:
  instance:
    #服務註冊中心例項的主機名
    hostname: localhost
  client:
    #是否將自己註冊到註冊中心,預設為 true,單例項模式下需要設定為 false
    register-with-eureka: false
    #是否從註冊中心獲取服務註冊資訊,預設為 true,單例項模式下需要設定為 false
    fetch-registry: false
    #註冊中心對外暴露的註冊地址
    service-url:
      defaultZone: http://${eureka.instance.hostname}:${server.port}/eureka/

(4)建立一個包名字叫com.caochenlei,在這個包下建立一個主啟動類EurekaServer7001Application

@EnableEurekaServer
@SpringBootApplication
public class EurekaServer7001Application {
    public static void main(String[] args) {
        SpringApplication.run(EurekaServer7001Application.class);
    }
}

(5)啟動當前註冊中心應用服務,然後開啟瀏覽器,在瀏覽器位址列中輸入:http://localhost:7001/

3.2、建立服務提供者

(1)在spring-cloud-study下建立一個子模組,名稱叫:service-provider8001

(2)在service-provider8001的pom.xml中,新增以下依賴資訊

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>
</dependencies>

(3)建立一個配置檔案,名字叫application.yaml,然後把以下這段配置拷貝進去

server:
  port: 8001

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: service-provider

eureka:
  instance:
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址
    service-url:
      defaultZone: http://localhost:7001/eureka/

(4)建立一個包名字叫com.caochenlei,在這個包下建立一個主啟動類ServiceProvider8001Application

@EnableEurekaClient
@SpringBootApplication
public class ServiceProvider8001Application {
    public static void main(String[] args) {
        SpringApplication.run(ServiceProvider8001Application.class);
    }
}

(5)編寫實體類程式碼(com.caochenlei.pojo.Product)

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
    private Integer pid;
    private String name;
    private Double price;
    private Integer count;
}

(6)編寫服務層介面(com.caochenlei.service.ProductService)

public interface ProductService {
    /**
     * 查詢所有商品
     * @return
     */
    public List<Product> findAll();
}

(7)編寫服務層實現(com.caochenlei.service.impl.ProductServiceImpl)

@Service
public class ProductServiceImpl implements ProductService {
    @Override
    public List<Product> findAll() {
        return Arrays.asList(
                new Product(1, "小米手機", 1000.0D, 100),
                new Product(2, "華為手機", 2000.0D, 200),
                new Product(3, "蘋果手機", 3000.0D, 300)
        );
    }
}

(8)編寫控制層程式碼(com.caochenlei.controller.ProductController)

@RestController
public class ProductController {
    @Autowired
    private ProductService productService;

    @RequestMapping("/provider/product/findAll")
    public List<Product> findAll() {
        return productService.findAll();
    }
}

(9)啟動當前服務提供者,然後開啟瀏覽器,在瀏覽器位址列中輸入:http://localhost:7001/

(10)測試我們剛才寫的業務程式碼,在瀏覽器位址列中輸入:http://localhost:8001/provider/product/findAll

3.3、建立服務消費者

(1)在spring-cloud-study下建立一個子模組,名稱叫:service-consumer9001

(2)在service-consumer9001的pom.xml中,新增以下依賴資訊

<dependencies>
    <dependency>
        <groupId>org.springframework.cloud</groupId>
        <artifactId>spring-cloud-starter-netflix-eureka-client</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-actuator</artifactId>
    </dependency>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-devtools</artifactId>
        <scope>runtime</scope>
        <optional>true</optional>
    </dependency>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.16</version>
    </dependency>
</dependencies>

(3)建立一個配置檔案,名字叫application.yaml,然後把以下這段配置拷貝進去

server:
  port: 9001

spring:
  application:
    name: service-consumer9001

eureka:
  client:
    #是否將自己註冊到註冊中心,預設為 true
    register-with-eureka: false
    #表示 Eureka Client 間隔多久去伺服器拉取註冊資訊,預設為 30 秒
    registry-fetch-interval-seconds: 10
    #設定服務註冊中心地址
    service-url:
      defaultZone: http://localhost:7001/eureka/

(4)建立一個包名字叫com.caochenlei,在這個包下建立一個主啟動類ServiceConsumer9001Application

@EnableEurekaClient
@SpringBootApplication
public class ServiceConsumer9001Application {
    public static void main(String[] args) {
        SpringApplication.run(ServiceConsumer9001Application.class);
    }

    @Bean
    public RestTemplate restTemplate(){
        return new RestTemplate();
    }
}

(5)編寫實體類程式碼(com.caochenlei.pojo.Product)

@Data
@NoArgsConstructor
@AllArgsConstructor
public class Product implements Serializable {
    private Integer pid;
    private String name;
    private Double price;
    private Integer count;
}

(6)編寫控制層程式碼(com.caochenlei.controller.ProductController)

@RestController
public class ProductController {
    public static final String BASE_URL = "http://localhost:8001";

    @Autowired
    private RestTemplate restTemplate;

    @RequestMapping("/consumer/product/findAll")
    public List<Product> findAll() {
        String findAllUrl = BASE_URL + "/provider/product/findAll";
        Product[] products = restTemplate.getForObject(findAllUrl, Product[].class);
        return Arrays.asList(products);
    }
}

(7)啟動當前服務消費者,然後開啟瀏覽器,在瀏覽器位址列中輸入:http://localhost:9001/consumer/product/findAll

注意:我們現在雖然可以正常呼叫成功,但聰明的你一定要知道,我們現在只是學習了註冊中心的搭建和服務的註冊,並沒有學習服務的遠端呼叫,這個restTemplate本身就是spring提供的一種訪問restful風格的模板類,他不是spring cloud的知識點,spring cloud下服務的呼叫我們會在後續章節或技術中進行介紹,這裡特別說明,是怕大家混淆,我們這一章節重點學習註冊中心。

第四章 Eureka叢集配置

4.1、配置叢集環境

(1)在剛才的父工程下再建立一個eureka-server7002註冊中心的專案,如果是多機器部署不用修改埠,通過 IP 區分服務,如果在一臺機器上演示需要修改埠區分服務。

(2)新增域名對映,eureka會把hostname相同的url移除掉,如果我們配置的都是localhost,所以雖然你啟動了兩個eureka,但是它們不會把自己當成叢集

C:\Windows\System32\drivers\etc\hosts

127.0.0.1 eureka-server7001.com
127.0.0.1 eureka-server7002.com

(3)修改eureka-server7001application.yaml

server:
  port: 7001

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: eureka-server

eureka:
  instance:
    #服務註冊中心例項的主機名
    hostname: eureka-server7001.com
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址,指向另一個註冊中心(除自己之外所有,多個使用逗號隔開)
    service-url:
      defaultZone: http://localhost:7002/eureka/

(4)修改eureka-server7002application.yaml

server:
  port: 7002

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: eureka-server

eureka:
  instance:
    #服務註冊中心例項的主機名
    hostname: eureka-server7002.com
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址,指向另一個註冊中心(除自己之外所有,多個使用逗號隔開)
    service-url:
      defaultZone: http://localhost:7001/eureka/

(5)啟動兩個註冊中心,他們會自動構成一個叢集環境,我們先啟動7001的,然後再啟動7002的,先啟動哪一個無所謂,但是會報錯,這屬於正常現象,因為你另一臺還沒有啟動,沒有辦法註冊,等兩臺都啟動了,過一會清除一下控制檯,就發現不報錯了。

4.2、修改服務提供者

application.yaml

server:
  port: 8001

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: service-provider

eureka:
  instance:
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址
    service-url:
      defaultZone: http://eureka-server7001.com:7001/eureka/,http://eureka-server7002.com:7002/eureka/

http://localhost:7001/ , http://localhost:7002/

4.3、修改服務消費者

application.yaml

server:
  port: 9001

spring:
  application:
    name: service-consumer9001

eureka:
  client:
    #是否將自己註冊到註冊中心,預設為 true
    register-with-eureka: false
    #表示 Eureka Client 間隔多久去伺服器拉取註冊資訊,預設為 30 秒
    registry-fetch-interval-seconds: 10
    #設定服務註冊中心地址
    service-url:
      defaultZone: http://eureka-server7001.com:7001/eureka/,http://eureka-server7002.com:7002/eureka/

ProductController

@RestController
public class ProductController {
    @Autowired
    private RestTemplate restTemplate;

    @Autowired
    private DiscoveryClient discoveryClient;

    @RequestMapping("/consumer/product/findAll")
    public List<Product> findAll() {
        //獲取註冊中心服務列表
        List<ServiceInstance> instances = discoveryClient.getInstances("SERVICE-PROVIDER");
        if (CollectionUtils.isEmpty(instances)) {
            return null;
        }

        //迴圈遍歷列印服務實體
        for (ServiceInstance instance : instances) {
            System.out.println(instance.getUri());
            System.out.println(instance.getHost());
            System.out.println(instance.getPort());
            System.out.println("====================");
        }

        //我們拿出第一個服務實體
        ServiceInstance si = instances.get(0);
        String findAllUrl = si.getUri() + "/provider/product/findAll";
        Product[] products = restTemplate.getForObject(findAllUrl, Product[].class);
        return Arrays.asList(products);
    }
}

http://localhost:9001/consumer/product/findAll

注意:這裡我們使用了discoveryClient獲取了註冊中心SERVICE-PROVIDER服務的服務列表,就是discoveryClient用來發現服務中心對應服務的地址,然後使用restTemplate進行遠端呼叫,上一章節的服務地址是咱們自己寫死的,這裡就更進一步,往後還有更好用的呼叫方式。

第五章 Eureka架構原理

  • Register(服務註冊):把自己的 IP 和埠註冊給 Eureka。
  • Renew(服務續約):傳送心跳包,每 30 秒傳送一次,告訴 Eureka 自己還活著。如果 90 秒還未傳送心跳,宕機。
  • Cancel(服務下線):當 Provider 關閉時會向 Eureka 傳送訊息,把自己從服務列表中刪除,防止 Consumer 呼叫到不存在的服務。
  • Get Registry(獲取服務註冊列表):獲取其他服務列表。
  • Replicate(叢集中資料同步):Eureka 叢集中的資料複製與同步。
  • Make Remote Call(遠端呼叫):完成服務的遠端呼叫。

第六章 Eureka自我保護

6.1、什麼是自我保護

一般情況下,服務在 Eureka 上註冊後,會每 30 秒傳送心跳包,Eureka 通過心跳來判斷服務是否健康,同時會定期刪除超過 90 秒沒有傳送心跳的服務。Eureka Server 在執行期間會去統計心跳失敗比例在 15 分鐘之內是否低於 85%,如果低於 85%,Eureka Server 會將這些例項保護起來,讓這些例項不會過期,同時提示一個警告,這種演算法叫做 Eureka Server 的自我保護模式,這種自我保護模式預設開啟。

有兩種情況會導致 Eureka Server 收不到微服務的心跳:

  • 微服務自身的原因
  • 微服務與 Eureka 之間的網路故障

6.2、為啥用自我保護

  • 因為同時保留"好資料"與"壞資料"總比丟掉任何資料要更好,當網路故障恢復後,這個 Eureka 節點會退出"自我保護模式"。
  • Eureka 還有客戶端快取功能(也就是微服務的快取功能),即使 Eureka 叢集中所有節點都宕機失效,微服務的 Provider 和 Consumer 都能正常通訊。
  • 微服務的負載均衡策略會自動剔除死亡的微服務節點。

6.3、如何關自我保護

註冊中心配置自我保護:

eureka:
  server:
    #true:開啟自我保護模式,false:關閉自我保護模式
    enable-self-preservation: false
    #清理間隔(單位:毫秒,預設是 60*1000)
    eviction-interval-timer-in-ms: 60000

第七章 Eureka優雅停服

7.1、什麼是優雅停服

在上一章節中,我們知道註冊中心註冊的服務預設會有自我保護模式,我們想要關閉這個模式也很簡單,要是我不想關閉這個模式,讓他正常預設啟用,現在我想要下線某一個服務,讓註冊中心知道,這個服務是我們人為的下線的,這時候,註冊中心應該正常踢出這個下線服務,而不是保護起來,這樣就不會觸發自我保護模式了,而其他的服務因為沒有停止仍然有可能會觸發自我保護模式,這個就是一種優雅的停止服務的方式。

7.2、如何配優雅停服

服務提供者配置優雅停服:

#度量指標監控與健康檢查
management:
  endpoints:
    web:
      exposure:
        #開啟 shutdown 端點訪問
        include: shutdown
  endpoint:
    #開啟 shutdown 實現優雅停服
    shutdown:
      enabled: true

開啟postman使用post方式關閉服務:http://localhost:8001/actuator/shutdown

第八章 Eureka安全認證

8.1、什麼是安全認證

現在我們已經學會搭建Eureka註冊中心叢集,但是,這個訪問地址我們是可以直接訪問的,既然我們可以直接訪問,那要是部署到線上,別人是不是也可以通過地址直接來訪問咱們的註冊中心,這會存在安全隱患,我們能不能在訪問註冊中心的時候,需要賬號和密碼的驗證,以此來保證訪問當前註冊中心的一定是咱們可信的人,那這個就是註冊中心的安全認證。

8.2、如何配安全認證

(1)註冊中心新增 security 依賴,兩個都要加

<!-- spring boot security 依賴 -->
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-security</artifactId>
</dependency>

(2)註冊中心配置 security 認證,兩個都要配

eureka-server7001的application.yaml

server:
  port: 7001

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: eureka-server
  # 安全認證
  security:
    user:
      name: root
      password: 123456

eureka:
  instance:
    #服務註冊中心例項的主機名
    hostname: eureka-server7001.com
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址,指向另一個註冊中心(除自己之外所有,多個使用逗號隔開)
    service-url:
      defaultZone: http://root:[email protected]:7002/eureka/

eureka-server7002的application.yaml

server:
  port: 7002

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: eureka-server
  # 安全認證
  security:
    user:
      name: root
      password: 123456

eureka:
  instance:
    #服務註冊中心例項的主機名
    hostname: eureka-server7002.com
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址,指向另一個註冊中心(除自己之外所有,多個使用逗號隔開)
    service-url:
      defaultZone: http://root:[email protected]:7001/eureka/

(3)修改服務提供者的註冊中心地址

server:
  port: 8001

spring:
  application:
    #該名稱在叢集模式下應該保持一致
    name: service-provider

#度量指標監控與健康檢查
management:
  endpoints:
    web:
      exposure:
        #開啟 shutdown 端點訪問
        include: shutdown
  endpoint:
    #開啟 shutdown 實現優雅停服
    shutdown:
      enabled: true

eureka:
  instance:
    #是否使用 ip 地址註冊
    prefer-ip-address: true
    #該例項註冊到服務中心的唯一ID
    instance-id: ${spring.cloud.client.ip-address}:${server.port}
  client:
    #設定服務註冊中心地址
    service-url:
      defaultZone: http://root:[email protected]:7001/eureka/,http://root:[email protected]:7002/eureka/

(4)修改服務消費者的註冊中心地址

server:
  port: 9001

spring:
  application:
    name: service-consumer9001

eureka:
  client:
    #是否將自己註冊到註冊中心,預設為 true
    register-with-eureka: false
    #表示 Eureka Client 間隔多久去伺服器拉取註冊資訊,預設為 30 秒
    registry-fetch-interval-seconds: 10
    #設定服務註冊中心地址
    service-url:
      defaultZone: http://root:[email protected]:7001/eureka/,http://root:[email protected]:7002/eureka/

(5)配置註冊中心的csrf

Eureka 會自動化配置 CSRF 防禦機制,Spring Security 認為 POST, PUT, and DELETE http methods 都是有風險的,如果這些 method 傳送過程中沒有帶上 CSRF token 的話,會被直接攔截並返回 403 forbidden。我們應該使 CSRF 忽略/eureka/**的所有請求。

在每一個註冊中心的com.caochenlei包下建立一個配置類,名字叫WebSecurityConfig

@Configuration
@EnableWebSecurity
public class WebSecurityConfig extends WebSecurityConfigurerAdapter {
    @Override
    protected void configure(HttpSecurity http) throws Exception {
        super.configure(http); // 加這句是為了訪問 eureka 控制檯和 /actuator 時能做安全控制
        http.csrf().ignoringAntMatchers("/eureka/**"); // 忽略 /eureka/** 的所有請求
    }
}

(6)重新啟動所有的專案,啟動的順序以此是

  1. eureka-server7001
  2. eureka-server7002
  3. service-provider8001
  4. service-consumer9001

(7)開啟瀏覽器輸入Eureka的控制檯地址,分別訪問

http://localhost:7001/

http://localhost:7002/

第九章 Eureka配置詳解

9.1、server

9.1.1、server與client之間關聯配置

#服務端開啟自我保護模式。無論什麼情況,服務端都會保持一定數量的服務。避免client與server的網路問題,而出現大量的服務被清除。
eureka.server.enable-self-preservation=true
#開啟清除無效服務的定時任務,時間間隔。預設1分鐘
eureka.server.eviction-interval-timer-in-ms= 60000
#間隔多長時間,清除過期的delta資料
eureka.server.delta-retention-timer-interval-in-ms=0
#過期資料,是否也提供給client
eureka.server.disable-delta=false
#eureka服務端是否記錄client的身份header
eureka.server.log-identity-headers=true
#請求頻率限制器
eureka.server.rate-limiter-burst-size=10
#是否開啟請求頻率限制器
eureka.server.rate-limiter-enabled=false
#請求頻率的平均值
eureka.server.rate-limiter-full-fetch-average-rate=100
#是否對標準的client進行頻率請求限制。如果是false,則只對非標準client進行限制
eureka.server.rate-limiter-throttle-standard-clients=false
#註冊服務、拉去服務列表資料的請求頻率的平均值
eureka.server.rate-limiter-registry-fetch-average-rate=500
#設定信任的client list
eureka.server.rate-limiter-privileged-clients=
#在設定的時間範圍類,期望與client續約的百分比。
eureka.server.renewal-percent-threshold=0.85
#多長時間更新續約的閾值
eureka.server.renewal-threshold-update-interval-ms=0
#對於快取的註冊資料,多長時間過期
eureka.server.response-cache-auto-expiration-in-seconds=180
#多長時間更新一次快取中的服務註冊資料
eureka.server.response-cache-update-interval-ms=0
#快取增量資料的時間,以便在檢索的時候不丟失資訊
eureka.server.retention-time-in-m-s-in-delta-queue=0
#當時間戳不一致的時候,是否進行同步
eureka.server.sync-when-timestamp-differs=true
#是否採用只讀快取策略,只讀策略對於快取的資料不會過期。
eureka.server.use-read-only-response-cache=true

9.1.2、server與remote之間關聯配置

#過期資料,是否也提供給遠端region
eureka.server.disable-delta-for-remote-regions=false
#回退到遠端區域中的應用程式的舊行為 (如果已配置) 如果本地區域中沒有該應用程式的例項, 則將被禁用。
eureka.server.disable-transparent-fallback-to-other-region=false
#指示在伺服器支援的情況下, 是否必須為遠端區域壓縮從尤里卡伺服器獲取的內容。
eureka.server.g-zip-content-from-remote-region=true
#連線eureka remote note的連線超時時間
eureka.server.remote-region-connect-timeout-ms=1000
#remote region 應用白名單
eureka.server.remote-region-app-whitelist.
#連線eureka remote note的連線空閒時間
eureka.server.remote-region-connection-idle-timeout-seconds=30
#執行remote region 獲取註冊資訊的請求執行緒池大小
eureka.server.remote-region-fetch-thread-pool-size=20
#remote region 從對等eureka加點讀取資料的超時時間
eureka.server.remote-region-read-timeout-ms=1000
#從remote region 獲取註冊資訊的時間間隔
eureka.server.remote-region-registry-fetch-interval=30
#remote region 連線eureka節點的總連線數量
eureka.server.remote-region-total-connections=1000
#remote region 連線eureka節點的單機連線數量
eureka.server.remote-region-total-connections-per-host=50
#remote region抓取註冊資訊的儲存檔案,而這個可靠的儲存檔案需要全限定名來指定
eureka.server.remote-region-trust-store=
#remote region 儲存的檔案的密碼
eureka.server.remote-region-trust-store-password=
#remote region url.多個逗號隔開
eureka.server.remote-region-urls=
#remote region url.多個逗號隔開
eureka.server.remote-region-urls-with-name=

9.1.3、server與other之間關聯配置

#快取ASG資訊的過期時間。
eureka.server.a-s-g-cache-expiry-timeout-ms=0
#查詢ASG資訊的超時時間
eureka.server.a-s-g-query-timeout-ms=300
#服務更新ASG資訊的頻率
eureka.server.a-s-g-update-interval-ms=0
#AWS訪問ID
eureka.server.a-w-s-access-id=
#AWS安全金鑰
eureka.server.a-w-s-secret-key=
#AWS繫結策略
eureka.server.binding-strategy=eip
#用於從第三方AWS 帳戶描述自動擴充套件分組的角色的名稱。
eureka.server.list-auto-scaling-groups-role-name=
#是否應該建立連線引導
eureka.server.prime-aws-replica-connections=true
#服務端嘗試繫結候選EIP的次數
eureka.server.e-i-p-bind-rebind-retries=3
#服務端繫結EIP的時間間隔.如果繫結就檢查;如果繫結失效就重新繫結。當且僅當已經繫結的情況
eureka.server.e-i-p-binding-retry-interval-ms=10
#服務端繫結EIP的時間間隔.當且僅當服務為繫結的情況
eureka.server.e-i-p-binding-retry-interval-ms-when-unbound=
#服務端嘗試繫結route53的次數
eureka.server.route53-bind-rebind-retries=3
#服務端間隔多長時間嘗試繫結route53
eureka.server.route53-binding-retry-interval-ms=30
#用於建立route53域的ttl,預設為30
eureka.server.route53-domain-t-t-l=10

9.1.4、node與node之間關聯配置

#傳送複製資料是否在request中,總是壓縮
eureka.server.enable-replicated-request-compression=false
#指示群集節點之間的複製是否應批處理以提高網路效率。
eureka.server.batch-replication=false
#允許備份到備份池的最大複製事件數量。而這個備份池負責除狀態更新的其他事件。可以根據記憶體大小,超時和複製流量,來設定此值得大小
eureka.server.max-elements-in-peer-replication-pool=10000
#允許備份到狀態備份池的最大複製事件數量
eureka.server.max-elements-in-status-replication-pool=10000
#多個服務中心相互同步資訊執行緒的最大空閒時間
eureka.server.max-idle-thread-age-in-minutes-for-peer-replication=15
#狀態同步執行緒的最大空閒時間
eureka.server.max-idle-thread-in-minutes-age-for-status-replication=15
#服務註冊中心各個instance相互複製資料的最大執行緒數量
eureka.server.max-threads-for-peer-replication=20
#服務註冊中心各個instance相互複製狀態資料的最大執行緒數量
eureka.server.max-threads-for-status-replication=1
#instance之間複製資料的通訊時長
eureka.server.max-time-for-replication=30000
#正常的對等服務instance最小數量。-1表示服務中心為單節點。
eureka.server.min-available-instances-for-peer-replication=-1
#instance之間相互複製開啟的最小執行緒數量
eureka.server.min-threads-for-peer-replication=5
#instance之間用於狀態複製,開啟的最小執行緒數量
eureka.server.min-threads-for-status-replication=1
#instance之間複製資料時可以重試的次數
eureka.server.number-of-replication-retries=5
#eureka節點間間隔多長時間更新一次資料。預設10分鐘。
eureka.server.peer-eureka-nodes-update-interval-ms=600000
#eureka服務狀態的相互更新的時間間隔。
eureka.server.peer-eureka-status-refresh-time-interval-ms=0
#eureka對等節點間連線超時時間
eureka.server.peer-node-connect-timeout-ms=200
#eureka對等節點連線後的空閒時間
eureka.server.peer-node-connection-idle-timeout-seconds=30
#節點間的讀資料連線超時時間
eureka.server.peer-node-read-timeout-ms=200
#eureka server 節點間連線的總共最大數量
eureka.server.peer-node-total-connections=1000
#eureka server 節點間連線的單機最大數量
eureka.server.peer-node-total-connections-per-host=10
#在服務節點啟動時,eureka嘗試獲取註冊資訊的次數
eureka.server.registry-sync-retries=
#在服務節點啟動時,eureka多次嘗試獲取註冊資訊的間隔時間
eureka.server.registry-sync-retry-wait-ms=
#當eureka server啟動的時候,不能從對等節點獲取instance註冊資訊的情況,應等待多長時間。
eureka.server.wait-time-in-ms-when-sync-empty=0

9.2、client

#該客戶端是否可用
eureka.client.enabled=true
#例項是否在eureka伺服器上註冊自己的資訊以供其他服務發現,預設為true
eureka.client.register-with-eureka=false
#此客戶端是否獲取eureka伺服器登錄檔上的註冊資訊,預設為true
eureka.client.fetch-registry=false
#是否過濾掉,非UP的例項。預設為true
eureka.client.filter-only-up-instances=true
#與Eureka註冊服務中心的通訊zone和url地址
eureka.client.serviceUrl.defaultZone=http://${eureka.instance.hostname}:${server.port}/eureka/
#client連線Eureka服務端後的空閒等待時間,預設為30 秒
eureka.client.eureka-connection-idle-timeout-seconds=30
#client連線eureka服務端的連線超時時間,預設為5秒
eureka.client.eureka-server-connect-timeout-seconds=5
#client對服務端的讀超時時長
eureka.client.eureka-server-read-timeout-seconds=8
#client連線all eureka服務端的總連線數,預設200
eureka.client.eureka-server-total-connections=200
#client連線eureka服務端的單機連線數量,預設50
eureka.client.eureka-server-total-connections-per-host=50
#執行程式指數回退重新整理的相關屬性,是重試延遲的最大倍數值,預設為10
eureka.client.cache-refresh-executor-exponential-back-off-bound=10
#執行程式快取重新整理執行緒池的大小,預設為5
eureka.client.cache-refresh-executor-thread-pool-size=2
#心跳執行程式回退相關的屬性,是重試延遲的最大倍數值,預設為10
eureka.client.heartbeat-executor-exponential-back-off-bound=10
#心跳執行程式執行緒池的大小,預設為5
eureka.client.heartbeat-executor-thread-pool-size=5
# 詢問Eureka服務url資訊變化的頻率(s),預設為300秒
eureka.client.eureka-service-url-poll-interval-seconds=300
#最初複製例項資訊到eureka伺服器所需的時間(s),預設為40秒
eureka.client.initial-instance-info-replication-interval-seconds=40
#間隔多長時間再次複製例項資訊到eureka伺服器,預設為30秒
eureka.client.instance-info-replication-interval-seconds=30
#從eureka伺服器登錄檔中獲取註冊資訊的時間間隔(s),預設為30秒
eureka.client.registry-fetch-interval-seconds=30
# 獲取例項所在的地區。預設為us-east-1
eureka.client.region=us-east-1
#例項是否使用同一zone裡的eureka伺服器,預設為true,理想狀態下,eureka客戶端與服務端是在同一zone下
eureka.client.prefer-same-zone-eureka=true
# 獲取例項所在的地區下可用性的區域列表,用逗號隔開。(AWS)
eureka.client.availability-zones.china=defaultZone,defaultZone1,defaultZone2
#eureka服務登錄檔資訊裡的以逗號隔開的地區名單,如果不這樣返回這些地區名單,則客戶端啟動將會出錯。預設為null
eureka.client.fetch-remote-regions-registry=
#伺服器是否能夠重定向客戶端請求到備份伺服器。 如果設定為false,伺服器將直接處理請求,如果設定為true,它可能傳送HTTP重定向到客戶端。預設為false
eureka.client.allow-redirects=false
#客戶端資料接收
eureka.client.client-data-accept=
#增量資訊是否可以提供給客戶端看,預設為false
eureka.client.disable-delta=false
#eureka伺服器序列化/反序列化的資訊中獲取“_”符號的的替換字串。預設為“__“
eureka.client.escape-char-replacement=__
#eureka伺服器序列化/反序列化的資訊中獲取“$”符號的替換字串。預設為“_-”
eureka.client.dollar-replacement="_-"
#當服務端支援壓縮的情況下,是否支援從服務端獲取的資訊進行壓縮。預設為true
eureka.client.g-zip-content=true
#是否記錄eureka伺服器和客戶端之間在登錄檔的資訊方面的差異,預設為false
eureka.client.log-delta-diff=false
# 如果設定為true,客戶端的狀態更新將會點播更新到遠端伺服器上,預設為true
eureka.client.on-demand-update-status-change=true
#此客戶端只對一個單一的VIP登錄檔的資訊感興趣。預設為null
eureka.client.registry-refresh-single-vip-address=
#client是否在初始化階段強行註冊到服務中心,預設為false
eureka.client.should-enforce-registration-at-init=false
#client在shutdown的時候是否顯示的登出服務從服務中心,預設為true
eureka.client.should-unregister-on-shutdown=true
# 獲取eureka服務的代理主機,預設為null
eureka.client.proxy-host=
#獲取eureka服務的代理密碼,預設為null
eureka.client.proxy-password=
# 獲取eureka服務的代理埠, 預設為null
eureka.client.proxy-port=
# 獲取eureka服務的代理使用者名稱,預設為null
eureka.client.proxy-user-name=
#屬性直譯器
eureka.client.property-resolver=
#獲取實現了eureka客戶端在第一次啟動時讀取登錄檔的資訊作為回退選項的實現名稱
eureka.client.backup-registry-impl=
#這是一個短暫的×××的配置,如果最新的×××是穩定的,則可以去除,預設為null
eureka.client.decoder-name=
#這是一個短暫的編碼器的配置,如果最新的編碼器是穩定的,則可以去除,預設為null
eureka.client.encoder-name=
#是否使用DNS機制去獲取服務列表,然後進行通訊。預設為false
eureka.client.use-dns-for-fetching-service-urls=false
#獲取要查詢的DNS名稱來獲得eureka伺服器,此配置只有在eureka伺服器ip地址列表是在DNS中才會用到。預設為null
eureka.client.eureka-server-d-n-s-name=
#獲取eureka伺服器的埠,此配置只有在eureka伺服器ip地址列表是在DNS中才會用到。預設為null
eureka.client.eureka-server-port=
#表示eureka註冊中心的路徑,如果配置為eureka,則為http://x.x.x.x:x/eureka/,在eureka的配置檔案中加入此配置表示eureka作為客戶端向註冊中心註冊,從而構成eureka叢集。此配置只有在eureka伺服器ip地址列表是在DNS中才會用到,預設為null
eureka.client.eureka-server-u-r-l-context=

9.3、instance

#服務註冊中心例項的主機名
eureka.instance.hostname=localhost
#註冊在Eureka服務中的應用組名
eureka.instance.app-group-name=
#註冊在的Eureka服務中的應用名稱
eureka.instance.appname=
#該例項註冊到服務中心的唯一ID
eureka.instance.instance-id=
#該例項的IP地址
eureka.instance.ip-address=
#該例項,相較於hostname是否優先使用IP
eureka.instance.prefer-ip-address=false
#用於AWS平臺自動擴充套件的與此例項關聯的組名,
eureka.instance.a-s-g-name=
#部署此例項的資料中心
eureka.instance.data-center-info=
#預設的地址解析順序
eureka.instance.default-address-resolution-order=
#該例項的環境配置
eureka.instance.environment=
#初始化該例項,註冊到服務中心的初始狀態
eureka.instance.initial-status=up
#表明是否只要此例項註冊到服務中心,立馬就進行通訊
eureka.instance.instance-enabled-onit=false
#該服務例項的名稱空間,用於查詢屬性
eureka.instance.namespace=eureka
#該服務例項的子定義元資料,可以被服務中心接受到
eureka.instance.metadata-map.test = test
#服務中心刪除此服務例項的等待時間(秒為單位),時間間隔為最後一次服務中心接受到的心跳時間
eureka.instance.lease-expiration-duration-in-seconds=90
#該例項給服務中心傳送心跳的間隔時間,用於表明該服務例項可用
eureka.instance.lease-renewal-interval-in-seconds=30
#該例項,註冊服務中心,預設開啟的通訊數量
eureka.instance.registry.default-open-for-traffic-count=1
#每分鐘續約次數
eureka.instance.registry.expected-number-of-renews-per-min=1
#該例項健康檢查url,絕對路徑
eureka.instance.health-check-url=
#該例項健康檢查url,相對路徑
eureka.instance.health-check-url-path=/health
#該例項的主頁url,絕對路徑
eureka.instance.home-page-url=
#該例項的主頁url,相對路徑
eureka.instance.home-page-url-path=/
#該例項的安全健康檢查url,絕對路徑
eureka.instance.secure-health-check-url=
#https通訊埠
eureka.instance.secure-port=443
#https通訊埠是否啟用
eureka.instance.secure-port-enabled=false
#http通訊埠
eureka.instance.non-secure-port=80
#http通訊埠是否啟用
eureka.instance.non-secure-port-enabled=true
#該例項的安全虛擬主機名稱(https)
eureka.instance.secure-virtual-host-name=unknown
#該例項的虛擬主機名稱(http)
eureka.instance.virtual-host-name=unknown
#該例項的狀態呈現url,絕對路徑
eureka.instance.status-page-url=
#該例項的狀態呈現url,相對路徑
eureka.instance.status-page-url-path=/status

9.4、dashboard

#是否啟用Eureka的儀表板。預設為true.
eureka.dashboard.enabled=true
#到Eureka儀表板的服務路徑(相對於servlet路徑)。預設為“/”
eureka.dashboard.path=/