1. 程式人生 > >spring cloud consul中文手冊

spring cloud consul中文手冊

Spring Cloud Consul

1.2.0.RELEASE

該專案通過自動配置並繫結到Spring環境和其他Spring程式設計模型成語,為Spring Boot應用程式提供Consul整合。通過幾個簡單的註釋,您可以快速啟用和配置應用程式中的常見模式,並使用基於Consul的元件構建大型分散式系統。提供的模式包括服務發現,控制匯流排和配置。智慧路由(Zuul)和客戶端負載平衡(Ribbon),斷路器(Hystrix)通過與Spring Cloud Netflix的整合提供。

安裝Consul

請參閱安裝文件獲取有關如何安裝Consul指令。

Consul Agent

所有Spring Cloud Consul應用程式必須可以使用Consul Agent客戶端。預設情況下,代理客戶端預計位於localhost:8500。有關如何啟動代理客戶端以及如何連線到Consul Agent伺服器的叢集的詳細資訊,請參閱代理文件。對於開發人員,在安裝了領事後,您可以使用以下命令啟動Consul Agent:

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">./src/main/bash/local_run_consul.sh</span></span>

這將啟動埠8500上的伺服器模式的代理,其中ui可以在http:// localhost:8500上找到

服務發現與Consul

服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個客戶端或某種形式的約定可能非常困難,可以非常脆弱。Consul通過HTTP APIDNS提供服務發現服務。Spring Cloud Consul利用HTTP API進行服務註冊和發現。這不會阻止非Spring雲應用程式利用DNS介面。Consul代理伺服器在通過八卦協議進行通訊群集中執行,並使用筏式協議協議

如何啟用

要啟用Consul服務發現,請使用組org.springframework.cloud

和工件id spring-cloud-starter-consul-discovery的啟動器。有關使用當前Spring雲端列車設定構建系統的詳細資訊,請參閱Spring雲端計算頁面

註冊Consul

當客戶端註冊Consul時,它提供有關自身的元資料,如主機和埠,ID,名稱和標籤。預設情況下,將建立一個HTTP 檢查,每隔10秒Consul命中/health端點。如果健康檢查失敗,則服務例項被標記為關鍵。

示例Consul客戶端:

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)"><code class="language-java">@SpringBootApplication
@EnableDiscoveryClient
@RestController
public class Application {

    @RequestMapping("/")
    public String home() {
        return "Hello world";
    }

    public static void main(String[] args) {
        new SpringApplicationBuilder(Application.class).web(true).run(args);
    }

}</code></span></span>

(即完全正常的Spring Boot應用程式)。如果Consul客戶端位於localhost:8500以外的位置,則需要配置來定位客戶端。例:

application.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      host: localhost
      port: 8500</span></span>

警告

如果您使用Spring Cloud Consul Config,上述值將需要放置在bootstrap.yml而不是application.yml中。

Environment獲取的預設服務名稱,例項ID和埠分別為${spring.application.name},Spring上下文ID和${server.port}

@EnableDiscoveryClient使應用程式成為Consul“服務”(即註冊自己)和“客戶端”(即可以查詢Consul查詢其他服務)。

HTTP健康檢查

Consul例項的執行狀況檢查預設為“/ health”,它是Spring Boot Actuator應用程式中有用端點的預設位置。如果您使用非預設上下文路徑或servlet路徑(例如server.servletPath=/foo)或管理端點路徑(例如management.context-path=/admin)),則需要更改這些,即使是執行器應用程式。也可以配置Consul用於檢查執行狀況端點的間隔。“10s”和“1m”分別表示10秒和1分鐘。例:

application.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      discovery:
        healthCheckPath: ${management.context-path}/health
        healthCheckInterval: 15s</span></span>

元資料和Consul標籤

Consul尚不支援服務元資料。Spring Cloud的ServiceInstance有一個Map<String, String> metadata欄位。Spring Cloud Consul使用Consul標籤來近似元資料,直到Consul正式支援元資料。具有key=value形式的標籤將被分割並分別用作Map鍵和值。沒有相等=符號的標籤將被用作鍵和值兩者。

application.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      discovery:
        tags: foo=bar, baz</span></span>

上述配置將導致具有foo→barbaz→baz的地圖。

使Consul例項ID唯一

預設情況下,一個領事實體註冊了一個等於其Spring應用程式上下文ID的ID。預設情況下,Spring應用上下文ID為${spring.application.name}:comma,separated,profiles:${server.port}。在大多數情況下,這將允許一個服務的多個例項在一臺機器上執行。如果需要進一步的唯一性,使用Spring Cloud可以通過在spring.cloud.consul.discovery.instanceId中提供唯一的標識來覆蓋此。例如:

application.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      discovery:
        instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}</span></span>

使用這個元資料和在localhost上部署的多個服務例項,隨機值將在那裡進行,以使例項是唯一的。在Cloudfoundry中,vcap.application.instance_id將在Spring Boot應用程式中自動填充,因此不需要隨機值。

使用DiscoveryClient

Spring Cloud支援Feign(一個REST客戶端構建器),還支援Spring RestTemplate使用邏輯服務名稱而不是實際的URL。

您還可以使用org.springframework.cloud.client.discovery.DiscoveryClient,它為Netflix不具體的發現客戶端提供簡單的API,例如

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">@Autowired
private DiscoveryClient discoveryClient;

public String serviceUrl() {
    List<ServiceInstance> list = discoveryClient.getInstances("STORES");
    if (list != null && list.size() > 0 ) {
        return list.get(0).getUri();
    }
    return null;
}</span></span>

具有Consul的分散式配置

Consul提供了用於儲存配置和其他元資料的鍵/值儲存。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引導”階段,配置被載入到Spring環境中。預設情況下,配置儲存在/config資料夾中。根據應用程式的名稱和模擬Spring Cloud Config順序解析屬性的活動配置檔案,建立多個PropertySource例項。例如,名為“testApp”的應用程式和“dev”配置檔案將建立以下屬性源:

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">config/testApp,dev/
config/testApp/
config/application,dev/
config/application/</span></span>

最具體的物業來源位於頂部,底部最不具體。Properties是config/application資料夾適用於使用consul進行配置的所有應用程式。config/testApp資料夾中的Properties僅適用於名為“testApp”的服務例項。

配置當前在應用程式啟動時被讀取。傳送HTTP POST到/refresh將導致重新載入配置。觀看鍵值儲存(Consul支援))目前不可能,但將來將是此專案的補充。

如何啟用

要開始使用Consul配置,請使用組org.springframework.cloud和工件id spring-cloud-starter-consul-config的啟動器。有關使用當前Spring雲端列車設定構建系統的詳細資訊,請參閱Spring雲端計算頁面

這將啟用將配置Spring Cloud Consul配置的自動配置。

定製

可以使用以下屬性自定義Consul配置:

bootstrap.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      config:
        enabled: true
        prefix: configuration
        defaultContext: apps
        profileSeparator: '::'</span></span>
  • enabled將此值設定為“false”將禁用Consul配置

  • prefix設定配置值的基本資料夾

  • defaultContext設定所有應用程式使用的資料夾名稱

  • profileSeparator設定分隔符的值,用於使用配置檔案在屬性源中分隔配置檔名稱

配置觀察

Consul配置觀察功能可以利用領事看守鑰匙字首的能力。Config Watch會阻止Consul HTTP API呼叫,以確定當前應用程式是否有任何相關配置資料發生更改。如果有新的配置資料,則會發布重新整理事件。這相當於呼叫/refresh執行器端點。

要更改Config Watch呼叫的頻率change spring.cloud.consul.config.watch.delay。預設值為1000,以毫秒為單位。

禁用Config Watch集合spring.cloud.consul.config.watch.enabled=false

YAML或Properties配置

儲存與YAML或Properties格式的一組屬性相對於單個鍵/值對可能更為方便。將spring.cloud.consul.config.format屬性設定為YAMLPROPERTIES。例如使用YAML:

bootstrap.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      config:
        format: YAML</span></span>

必須在適當的data鍵中設定YAML。使用鍵上面的預設值將如下所示:

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">config/testApp,dev/data
config/testApp/data
config/application,dev/data
config/application/data</span></span>

您可以將YAML文件儲存在上述任何鍵中。

您可以使用spring.cloud.consul.config.data-key更改資料金鑰。

git2consul與配置

git2consul是一個Consul社群專案,將檔案從git儲存庫載入到各個金鑰到Consul。預設情況下,金鑰的名稱是檔案的名稱。分別支援副檔名為.yml.properties的YAML和Properties檔案。將spring.cloud.consul.config.format屬性設定為FILES。例如:

bootstrap.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring:
  cloud:
    consul:
      config:
        format: FILES</span></span>

給定/config中的以下金鑰,development配置檔案和應用程式名稱為foo

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">.gitignore
application.yml
bar.properties
foo-development.properties
foo-production.yml
foo.properties
master.ref</span></span>

將建立以下屬性來源:

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">config/foo-development.properties
config/foo.properties
config/application.yml</span></span>

每個鍵的值需要是一個格式正確的YAML或Properties檔案。

快速失敗

在某些情況下(如本地開發或某些測試場景)可能會方便,如果不能配置領事,則不會失敗。在bootstrap.yml中設定spring.cloud.consul.config.failFast=false將導致配置模組記錄一個警告而不是丟擲異常。這將允許應用程式繼續正常啟動。

Consul重試

如果您希望您的應用程式啟動時可能偶爾無法使用代理商,則可以要求您在發生故障後繼續嘗試。您需要在您的類路徑中新增spring-retryspring-boot-starter-aop。預設行為是重試6次,初始退避間隔為1000ms,指數乘數為1.1,用於後續退避。您可以使用spring.cloud.consul.retry.*配置屬性配置這些屬性(和其他)。這適用於Spring Cloud Consul配置和發現註冊。

提示

要完全控制重試,請使用id為“consulRetryInterceptor”新增RetryOperationsInterceptor型別的@Bean。Spring重試有一個RetryInterceptorBuilder,可以輕鬆建立一個。

Spring Cloud Bus與Consul

如何啟用

要開始使用Consul匯流排,請使用組org.springframework.cloud和工件ID spring-cloud-starter-consul-bus的啟動器。有關使用當前Spring雲端列車設定構建系統的詳細資訊,請參閱Spring雲端計算頁面

有關可用的執行機構端點以及如何傳送自定義訊息,請參閱Spring Cloud Bus文件。

斷路器與Hystrix

應用程式可以使用Spring Cloud Netflix專案提供的Hystrix斷路器,將此啟動器包含在專案pom.xml:spring-cloud-starter-hystrix中。Hystrix不依賴於Netflix Discovery Client。@EnableHystrix註釋應放置在配置類(通常是主類)上。那麼方法可以用@HystrixCommand註釋來被斷路器保護。有關詳細資訊,請參閱文件

使用Turbine和Consul Hystrix指標聚合

Turbine(由Spring Cloud Netflix專案提供),聚合多個例項Hystrix指標流,因此儀表板可以顯示聚合檢視。Turbine使用DiscoveryClient介面查詢相關例項。要將Turbine與Spring Cloud Consul配合使用與以下示例類似的方式配置Turbine應用程式:

pom.xml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)"><dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-netflix-turbine</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.cloud</groupId>
    <artifactId>spring-cloud-starter-consul-discovery</artifactId>
</dependency></span></span>

請注意,Turbine依賴不是起始者。渦輪啟動器包括對Netflix Eureka的支援。

application.yml

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">spring.application.name: turbine
applications: consulhystrixclient
turbine:
  aggregator:
    clusterConfig: ${applications}
  appConfig: ${applications}</span></span>

clusterConfigappConfig部分必須匹配,因此將逗號分隔的服務標識列表放在單獨的配置屬性中是有用的。

Turbine.java

<span style="color:rgba(0, 0, 0, 0.8)"><span style="color:rgba(0, 0, 0, 0.9)">@EnableTurbine
@EnableDiscoveryClient
@SpringBootApplication
public class Turbine {
    public static void main(String[] args) {
        SpringApplication.run(DemoturbinecommonsApplication.class, args);
    }
}</span></span>