標籤:lis rop environ command 控制 系統 project .class 檔案夾
1.2.0.RELEASE
該項目通過自動設定並綁定到Spring環境和其他Spring編程模型成語,為Spring Boot應用程式提供Consul整合。通過幾個簡單的注釋,您可以快速啟用和配置應用程式中的常見模式,並使用基於Consul的組件構建大型分布式系統。提供的模式包括服務發現,控制匯流排和配置。智能路由(Zuul)和用戶端Server Load Balancer(Ribbon),斷路器(Hystrix)通過與Spring Cloud Netflix的整合提供。
安裝Consul
請參閱安裝文檔擷取有關如何安裝Consul指令。
Consul Agent
所有Spring Cloud Consul應用程式必須可以使用Consul Agent用戶端。預設情況下,代理用戶端預計位於localhost:8500。有關如何啟動代理用戶端以及如何串連到Consul Agent伺服器的叢集的詳細資料,請參閱代理文檔。對於開發人員,在安裝了領事後,您可以使用以下命令啟動Consul Agent:
./src/main/bash/local_run_consul.sh
這將啟動連接埠8500上的伺服器模式的代理,其中ui可以在http:// localhost:8500上找到
服務發現與Consul
服務發現是基於微服務架構的關鍵原則之一。嘗試配置每個用戶端或某種形式的約定可能非常困難,可以非常脆弱。Consul通過HTTP API和DNS提供服務探索服務。Spring Cloud Consul利用HTTP API進行服務註冊和發現。這不會阻止非Spring雲應用程式利用DNS介面。ConsulProxy 伺服器在通過八卦協議進行通訊的群集中運行,並使用筏式協議協議。
如何啟用
要啟用Consul服務發現,請使用組org.springframework.cloud和工件id spring-cloud-starter-consul-discovery的啟動器。有關使用當前Spring雲端列車設定構建系統的詳細資料,請參閱Spring雲端運算頁面。
註冊Consul
當用戶端註冊Consul時,它提供有關自身的中繼資料,如主機和連接埠,ID,名稱和標籤。預設情況下,將建立一個HTTP 檢查,每隔10秒Consul命中/health端點。如果健全狀態檢查失敗,則服務執行個體被標記為關鍵。
樣本Consul用戶端:
@SpringBootApplication@EnableDiscoveryClient@RestControllerpublic class Application { @RequestMapping("/") public String home() { return "Hello world"; } public static void main(String[] args) { new SpringApplicationBuilder(Application.class).web(true).run(args); }}
(即完全正常的Spring Boot應用程式)。如果Consul用戶端位於localhost:8500以外的位置,則需要配置來定位用戶端。例:
application.yml
spring: cloud: consul: host: localhost port: 8500
| 警告 |
如果您使用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
spring: cloud: consul: discovery: healthCheckPath: ${management.context-path}/health healthCheckInterval: 15s中繼資料和Consul標籤
Consul尚不支援服務中繼資料。Spring Cloud的ServiceInstance有一個Map<String, String> metadata欄位。Spring Cloud Consul使用Consul標籤來近似中繼資料,直到Consul正式支援中繼資料。具有key=value形式的標籤將被分割並分別用作Map鍵和值。沒有相等=符號的標籤將被用作鍵和值兩者。
application.yml
spring: cloud: consul: discovery: tags: foo=bar, baz
上述配置將導致具有foo→bar和baz→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
spring: cloud: consul: discovery: instanceId: ${spring.application.name}:${vcap.application.instance_id:${spring.application.instance_id:${random.value}}}
使用這個中繼資料和在localhost上部署的多個服務執行個體,隨機值將在那裡進行,以使執行個體是唯一的。在Cloudfoundry中,vcap.application.instance_id將在Spring Boot應用程式中自動填滿,因此不需要隨機值。
使用DiscoveryClient
Spring Cloud支援Feign(一個REST用戶端構建器),還支援Spring RestTemplate使用邏輯服務名稱而不是實際的URL。
您還可以使用org.springframework.cloud.client.discovery.DiscoveryClient,它為Netflix不具體的發現用戶端提供簡單的API,例如
@Autowiredprivate DiscoveryClient discoveryClient;public String serviceUrl() { List<ServiceInstance> list = discoveryClient.getInstances("STORES"); if (list != null && list.size() > 0 ) { return list.get(0).getUri(); } return null;}具有Consul的分布式配置
Consul提供了用於儲存配置和其他中繼資料的鍵/值儲存。Spring Cloud Consul Config是Config Server和Client的替代方案。在特殊的“引導”階段,配置被載入到Spring環境中。預設情況下,配置儲存在/config檔案夾中。根據應用程式的名稱和類比Spring Cloud Config順序解析屬性的活動設定檔,建立多個PropertySource執行個體。例如,名為“testApp”的應用程式和“dev”設定檔將建立以下屬性源:
config/testApp,dev/config/testApp/config/application,dev/config/application/
最具體的物業來源位於頂部,底部最不具體。Properties是config/application檔案夾適用於使用consul進行配置的所有應用程式。config/testApp檔案夾中的Properties僅適用於名為“testApp”的服務執行個體。
配置當前在應用程式啟動時被讀取。發送HTTP POST到/refresh將導致重新載入配置。觀看KVStore for Redis(Consul支援))目前不可能,但將來將是此項目的補充。
如何啟用
要開始使用Consul配置,請使用組org.springframework.cloud和工件id spring-cloud-starter-consul-config的啟動器。有關使用當前Spring雲端列車設定構建系統的詳細資料,請參閱Spring雲端運算頁面。
這將啟用將配置Spring Cloud Consul配置的自動設定。
定製
可以使用以下屬性自訂Consul配置:
bootstrap.yml
spring: cloud: consul: config: enabled: true prefix: configuration defaultContext: apps profileSeparator: ‘::‘
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屬性設定為YAML或PROPERTIES。例如使用YAML:
bootstrap.yml
spring: cloud: consul: config: format: YAML
必須在適當的data鍵中設定YAML。使用鍵上面的預設值將如下所示:
config/testApp,dev/dataconfig/testApp/dataconfig/application,dev/dataconfig/application/data
您可以將YAML文檔儲存在上述任何鍵中。
您可以使用spring.cloud.consul.config.data-key更改資料密鑰。
git2consul與配置
git2consul是一個Consul社區項目,將檔案從git存放庫載入到各個密鑰到Consul。預設情況下,密鑰的名稱是檔案的名稱。分別支援副檔名為.yml和.properties的YAML和Properties檔案。將spring.cloud.consul.config.format屬性設定為FILES。例如:
bootstrap.yml
spring: cloud: consul: config: format: FILES
給定/config中的以下密鑰,development設定檔和應用程式名稱為foo:
.gitignoreapplication.ymlbar.propertiesfoo-development.propertiesfoo-production.ymlfoo.propertiesmaster.ref
將建立以下屬性來源:
config/foo-development.propertiesconfig/foo.propertiesconfig/application.yml
每個鍵的值需要是一個格式正確的YAML或Properties檔案。
快速失敗
在某些情況下(如本地開發或某些測試情境)可能會方便,如果不能配置領事,則不會失敗。在bootstrap.yml中設定spring.cloud.consul.config.failFast=false將導致配置模組記錄一個警告而不是拋出異常。這將允許應用程式繼續正常啟動。
Consul重試
如果您希望您的應用程式啟動時可能偶爾無法使用代理商,則可以要求您在發生故障後繼續嘗試。您需要在您的類路徑中添加spring-retry和spring-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
<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>
請注意,Turbine依賴不是起始者。渦輪啟動器包括對Netflix Eureka的支援。
application.yml
spring.application.name: turbineapplications: consulhystrixclientturbine: aggregator: clusterConfig: ${applications} appConfig: ${applications}
clusterConfig和appConfig部分必須匹配,因此將逗號分隔的服務識別列表放在單獨的配置屬性中是有用的。
Turbine.java
@EnableTurbine@EnableDiscoveryClient@SpringBootApplicationpublic class Turbine { public static void main(String[] args) { SpringApplication.run(DemoturbinecommonsApplication.class, args); }}
Spring Cloud Consul