Zookeeper 依賴

使用 Zookeeper 依賴

Spring Cloud Zookeeper 使您能夠將應用程式的依賴作為屬性提供。作為依賴,您可以理解為在 Zookeeper 中註冊的其他應用程式,您希望透過 OpenFeign(一個 REST 客戶端構建器)、RestTemplateWebClient 經由 Spring Cloud Loadbalancer 呼叫這些應用程式。

您還可以使用 Zookeeper 依賴監視器功能來控制和監控依賴的狀態。

啟用 Zookeeper 依賴

包含對 org.springframework.cloud:spring-cloud-starter-zookeeper-discovery 的依賴項會啟用自動配置,該配置會設定 Spring Cloud Zookeeper 依賴項。即使您在屬性中提供了依賴項,您也可以關閉這些依賴項。要做到這一點,請將 spring.cloud.zookeeper.dependency.enabled 屬性設定為 false(它預設為 true)。

設定 Zookeeper 依賴

考慮以下依賴表示示例

application.yml
spring.application.name: yourServiceName
spring.cloud.zookeeper:
  dependencies:
    newsletter:
      path: /path/where/newsletter/has/registered/in/zookeeper
      loadBalancerType: ROUND_ROBIN
      contentTypeTemplate: application/vnd.newsletter.$version+json
      version: v1
      headers:
        header1:
            - value1
        header2:
            - value2
      required: false
      stubs: org.springframework:foo:stubs
    mailing:
      path: /path/where/mailing/has/registered/in/zookeeper
      loadBalancerType: ROUND_ROBIN
      contentTypeTemplate: application/vnd.mailing.$version+json
      version: v1
      required: true

接下來的幾節將逐一介紹依賴的每個部分。根屬性名為 spring.cloud.zookeeper.dependencies

別名

在根屬性下面,您必須將每個依賴表示為別名。這是由於 Spring Cloud LoadBalancer 的限制,它要求將應用程式 ID 放在 URL 中。因此,您不能傳遞任何複雜的路徑,例如 /myApp/myRoute/name)。別名是您代替 serviceId 用於 DiscoveryClientFeignRestTemplate 的名稱。

在前面的示例中,別名是 newslettermailing。以下示例展示了使用 newsletter 別名的 Feign 用法

@FeignClient("newsletter")
public interface NewsletterService {
        @RequestMapping(method = RequestMethod.GET, value = "/newsletter")
        String getNewsletters();
}

路徑

路徑由 path YAML 屬性表示,是依賴項在 Zookeeper 下注冊的路徑。如上一節所述,Spring Cloud LoadBalancer 操作 URL。因此,此路徑不符合其要求。這就是 Spring Cloud Zookeeper 將別名對映到正確路徑的原因。

負載均衡器型別

負載均衡器型別由 loadBalancerType YAML 屬性表示。

如果您知道在呼叫此特定依賴項時必須應用哪種負載平衡策略,您可以在 YAML 檔案中提供它,它會自動應用。您可以選擇以下負載平衡策略之一

  • STICKY:一旦選擇,例項將始終被呼叫。

  • RANDOM:隨機選擇一個例項。

  • ROUND_ROBIN:迴圈迭代例項。

Content-Type 模板和版本

Content-Type 模板和版本由 contentTypeTemplateversion YAML 屬性表示。

如果您在 Content-Type 標頭中對 API 進行版本控制,您不希望將此標頭新增到每個請求中。此外,如果您想呼叫新版本的 API,您也不希望在程式碼中四處尋找以提升 API 版本。這就是您可以提供一個帶有特殊 $version 佔位符的 contentTypeTemplate 的原因。該佔位符將由 version YAML 屬性的值填充。考慮以下 contentTypeTemplate 示例

application/vnd.newsletter.$version+json

進一步考慮以下 version

v1

contentTypeTemplate 和版本的組合導致為每個請求建立 Content-Type 標頭,如下所示

application/vnd.newsletter.v1+json

預設標頭

預設標頭在 YAML 中由 headers 對映表示。

有時,對依賴項的每次呼叫都需要設定一些預設標頭。為了不在程式碼中執行此操作,您可以在 YAML 檔案中設定它們,如以下 headers 部分示例所示

headers:
    Accept:
        - text/html
        - application/xhtml+xml
    Cache-Control:
        - no-cache

headers 部分將導致在您的 HTTP 請求中新增帶有適當值列表的 AcceptCache-Control 標頭。

必需的依賴項

所需的依賴項在 YAML 中由 required 屬性表示。

如果您的應用程式啟動時需要其中一個依賴項正常執行,您可以在 YAML 檔案中設定 required: true 屬性。

如果您的應用程式在啟動時無法定位所需的依賴項,它會丟擲異常,並且 Spring Context 無法設定。換句話說,如果所需的依賴項未在 Zookeeper 中註冊,您的應用程式將無法啟動。

您可以在本文件後面閱讀更多關於 Spring Cloud Zookeeper 存在檢查器的資訊。

存根

您可以提供一個冒號分隔的路徑,指向包含依賴項存根的 JAR 包,如以下示例所示

存根: org.springframework:myApp:stubs

其中:

  • org.springframeworkgroupId

  • myAppartifactId

  • stubs 是分類器。(注意 stubs 是預設值。)

因為 stubs 是預設分類器,所以前面的示例等同於以下示例

存根: org.springframework:myApp

配置 Spring Cloud Zookeeper 依賴

您可以設定以下屬性來啟用或停用 Zookeeper 依賴項功能的某些部分

  • spring.cloud.zookeeper.dependencies:如果您不設定此屬性,則無法使用 Zookeeper 依賴項。

  • spring.cloud.zookeeper.dependency.loadbalancer.enabled(預設啟用):開啟 Zookeeper 特定的自定義負載均衡策略,包括 ZookeeperServiceInstanceListSupplier 和基於依賴的負載均衡 RestTemplate 設定。

  • spring.cloud.zookeeper.dependency.headers.enabled(預設啟用):此屬性註冊一個 FeignBlockingLoadBalancerClient,它會自動新增適當的標頭和內容型別及其版本,如依賴配置中所示。如果沒有此設定,這兩個引數將不起作用。

  • spring.cloud.zookeeper.dependency.resttemplate.enabled(預設啟用):啟用後,此屬性會修改 @LoadBalanced 註解的 RestTemplate 的請求頭,使其傳遞依賴配置中設定的帶有版本的頭和內容型別。如果沒有此設定,這兩個引數將不起作用。

© . This site is unofficial and not affiliated with VMware.