本篇内容主要讲解“spring cloud中ConsulAutoConfiguration的用法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“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会调用ConsulClient.getStatusLeader获取leaderStatus,以及ConsulClient.getCatalogServices获取catalogServices信息
ConsulAutoConfiguration注册了ConsulClient、ConsulEndpoint、ConsulHealthIndicator
ConsulEndpoint有个ReadOperation,返回的是ConsulData,包含了agentServices、agentServices、catalogNodes
ConsulHealthIndicator继承了AbstractHealthIndicator,其doHealthCheck会调用ConsulClient.getStatusLeader获取leaderStatus,以及ConsulClient.getCatalogServices获取catalogServices信息
到此,相信大家对“spring cloud中ConsulAutoConfiguration的用法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!
亿速云「云服务器」,即开即用、新一代英特尔至强铂金CPU、三副本存储NVMe SSD云盘,价格低至29元/月。点击查看>>
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。
原文链接:https://my.oschina.net/go4it/blog/3079742