您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“spring cloud中ConsulAutoConfiguration的用法”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實(shí)用性強(qiáng)。下面就讓小編來帶大家學(xué)習(xí)“spring cloud中ConsulAutoConfiguration的用法”吧!
本文主要研究一下spring cloud的ConsulAutoConfiguration
spring-cloud-consul-core-2.1.2.RELEASE-sources.jar!/org/springframework/cloud/consul/ConsulAutoConfiguration.java
@Configuration @EnableConfigurationProperties @ConditionalOnConsulEnabled public class ConsulAutoConfiguration { @Bean @ConditionalOnMissingBean public ConsulProperties consulProperties() { return new ConsulProperties(); } @Bean @ConditionalOnMissingBean public ConsulClient consulClient(ConsulProperties consulProperties) { final int agentPort = consulProperties.getPort(); final String agentHost = !StringUtils.isEmpty(consulProperties.getScheme()) ? consulProperties.getScheme() + "://" + consulProperties.getHost() : consulProperties.getHost(); if (consulProperties.getTls() != null) { ConsulProperties.TLSConfig tls = consulProperties.getTls(); TLSConfig tlsConfig = new TLSConfig(tls.getKeyStoreInstanceType(), tls.getCertificatePath(), tls.getCertificatePassword(), tls.getKeyStorePath(), tls.getKeyStorePassword()); return new ConsulClient(agentHost, agentPort, tlsConfig); } return new ConsulClient(agentHost, agentPort); } @Configuration @ConditionalOnClass(Endpoint.class) protected static class ConsulHealthConfig { @Bean @ConditionalOnMissingBean @ConditionalOnEnabledEndpoint public ConsulEndpoint consulEndpoint(ConsulClient consulClient) { return new ConsulEndpoint(consulClient); } @Bean @ConditionalOnMissingBean @ConditionalOnEnabledHealthIndicator("consul") public ConsulHealthIndicator consulHealthIndicator(ConsulClient consulClient) { return new ConsulHealthIndicator(consulClient); } } @ConditionalOnClass({ Retryable.class, Aspect.class, AopAutoConfiguration.class }) @Configuration @EnableRetry(proxyTargetClass = true) @Import(AopAutoConfiguration.class) @EnableConfigurationProperties(RetryProperties.class) protected static class RetryConfiguration { @Bean(name = "consulRetryInterceptor") @ConditionalOnMissingBean(name = "consulRetryInterceptor") public RetryOperationsInterceptor consulRetryInterceptor( RetryProperties properties) { return RetryInterceptorBuilder.stateless() .backOffOptions(properties.getInitialInterval(), properties.getMultiplier(), properties.getMaxInterval()) .maxAttempts(properties.getMaxAttempts()).build(); } } }
ConsulAutoConfiguration注冊了ConsulClient、ConsulEndpoint、ConsulHealthIndicator
spring-cloud-consul-core-2.1.2.RELEASE-sources.jar!/org/springframework/cloud/consul/ConsulEndpoint.java
@Endpoint(id = "consul") public class ConsulEndpoint { private ConsulClient consul; public ConsulEndpoint(ConsulClient consul) { this.consul = consul; } @ReadOperation public ConsulData invoke() { ConsulData data = new ConsulData(); // data.setKeyValues(kvClient.getKeyValueRecurse()); Response<Map<String, Service>> agentServices = this.consul.getAgentServices(); data.setAgentServices(agentServices.getValue()); Response<Map<String, List<String>>> catalogServices = this.consul .getCatalogServices(QueryParams.DEFAULT); for (String serviceId : catalogServices.getValue().keySet()) { Response<List<CatalogService>> response = this.consul .getCatalogService(serviceId, QueryParams.DEFAULT); data.getCatalogServices().put(serviceId, response.getValue()); } Response<List<Node>> catalogNodes = this.consul .getCatalogNodes(QueryParams.DEFAULT); data.setCatalogNodes(catalogNodes.getValue()); return data; } /** * Represents Consul data related to catalog entries and agent servies. */ public static class ConsulData { Map<String, List<CatalogService>> catalogServices = new LinkedHashMap<>(); Map<String, Service> agentServices; List<Node> catalogNodes; public ConsulData() { } public Map<String, List<CatalogService>> getCatalogServices() { return this.catalogServices; } public void setCatalogServices( Map<String, List<CatalogService>> catalogServices) { this.catalogServices = catalogServices; } public Map<String, Service> getAgentServices() { return this.agentServices; } public void setAgentServices(Map<String, Service> agentServices) { this.agentServices = agentServices; } public List<Node> getCatalogNodes() { return this.catalogNodes; } public void setCatalogNodes(List<Node> catalogNodes) { this.catalogNodes = catalogNodes; } @Override public String toString() { return new ToStringCreator(this) .append("catalogServices", this.catalogServices) .append("agentServices", this.agentServices) .append("catalogNodes", this.catalogNodes).toString(); } } }
ConsulEndpoint有個ReadOperation,返回的是ConsulData,包含了agentServices、agentServices、catalogNodes
spring-cloud-consul-core-2.1.2.RELEASE-sources.jar!/org/springframework/cloud/consul/ConsulHealthIndicator.java
public class ConsulHealthIndicator extends AbstractHealthIndicator { private ConsulClient consul; public ConsulHealthIndicator(ConsulClient consul) { this.consul = consul; } @Override protected void doHealthCheck(Health.Builder builder) throws Exception { final Response<String> leaderStatus = this.consul.getStatusLeader(); final Response<Map<String, List<String>>> services = this.consul .getCatalogServices(QueryParams.DEFAULT); builder.up().withDetail("leader", leaderStatus.getValue()).withDetail("services", services.getValue()); } }
ConsulHealthIndicator繼承了AbstractHealthIndicator,其doHealthCheck會調(diào)用ConsulClient.getStatusLeader獲取leaderStatus,以及ConsulClient.getCatalogServices獲取catalogServices信息
ConsulAutoConfiguration注冊了ConsulClient、ConsulEndpoint、ConsulHealthIndicator
ConsulEndpoint有個ReadOperation,返回的是ConsulData,包含了agentServices、agentServices、catalogNodes
ConsulHealthIndicator繼承了AbstractHealthIndicator,其doHealthCheck會調(diào)用ConsulClient.getStatusLeader獲取leaderStatus,以及ConsulClient.getCatalogServices獲取catalogServices信息
到此,相信大家對“spring cloud中ConsulAutoConfiguration的用法”有了更深的了解,不妨來實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。