consul作为SpringCloud注册中心 快来打我* 2021-12-12 06:57 372阅读 0赞 一、consul 简介 Consul是一种服务发现和配置工具。Consul具有分布式,高可用性和极高的可扩展性。 * 服务发现 - 使用简单的服务来注册自己并通过DNS或HTTP接口发现其他服务。也可以注册SaaS提供商等外部服务。 * 运行状况检查 - 运行状况检查使Consul能够快速向运营商发出有关群集中任何问题的警报 与服务发现的集成可防止将流量路由到不健康的主机,并启用服务级别的断路器。 * 密钥/值存储 - 灵活的密钥/值存储可以存储动态配置,功能标记,协调,leader选举等。简单的HTTP API使其易于在任何地方使用。 多数据中心 - Consul可以识别数据中心,并且可以支持任意数量的区域而无需复杂的配置。 * 服务分段 - Consul Connect通过自动TLS加密和基于身份的授权实现安全的服务到服务通信。 官网地址:[https://www.hashicorp.com/products/consul/][https_www.hashicorp.com_products_consul] github:[https://github.com/hashicorp/consul][https_github.com_hashicorp_consul] 注意:在本地启用consul 需要通过cmd 命令行,详见: [https://jingyan.baidu.com/article/ca41422f732f961eaf99ed5f.html][https_jingyan.baidu.com_article_ca41422f732f961eaf99ed5f.html] 二、SpringCloud 用 consul作为注册中心 2.1 服务提供方 **1) pom依赖** <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> **2)配置文件** application.properties #0表示服务器随机端口 server.port=0 #consul 地址 spring.cloud.consul.host=localhost #consul 端口 spring.cloud.consul.port=8500 spring.cloud.consul.discovery.prefer-ip-address=true bootstrap.properties #服务名称 spring.application.name=waiter-service **3)代码配置** @SpringBootApplication @EnableDiscoveryClient public class WaiterServiceApplication implements WebMvcConfigurer { public static void main(String[] args) { SpringApplication.run(WaiterServiceApplication.class, args); } } 2.2 服务消费方 **1) pom依赖** <properties> <java.version>1.8</java.version> <spring-cloud.version>Greenwich.SR1</spring-cloud.version> </properties> <dependencyManagement> <dependencies> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-dependencies</artifactId> <version>${spring-cloud.version}</version> <type>pom</type> <scope>import</scope> </dependency> </dependencies> </dependencyManagement> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-web</artifactId> </dependency> <dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-actuator</artifactId> </dependency> <dependency> <groupId>org.springframework.cloud</groupId> <artifactId>spring-cloud-starter-consul-discovery</artifactId> </dependency> **2)配置文件** application.properties #0表示服务器随机端口 server.port=0 #consul 地址 spring.cloud.consul.host=localhost #consul 端口 spring.cloud.consul.port=8500 spring.cloud.consul.discovery.prefer-ip-address=true bootstrap.properties #服务名称 spring.application.name=customer-service **3)代码配置** @SpringBootApplication @Slf4j @EnableDiscoveryClient public class CustomerServiceApplication { public static void main(String[] args) { SpringApplication.run(CustomerServiceApplication.class, args); } @Bean public HttpComponentsClientHttpRequestFactory requestFactory() { PoolingHttpClientConnectionManager connectionManager = new PoolingHttpClientConnectionManager(30, TimeUnit.SECONDS); connectionManager.setMaxTotal(200); connectionManager.setDefaultMaxPerRoute(20); CloseableHttpClient httpClient = HttpClients.custom() .setConnectionManager(connectionManager) .evictIdleConnections(30, TimeUnit.SECONDS) .disableAutomaticRetries() // 有 Keep-Alive 认里面的值,没有的话永久有效 //.setKeepAliveStrategy(DefaultConnectionKeepAliveStrategy.INSTANCE) // 换成自定义的 .setKeepAliveStrategy(new CustomConnectionKeepAliveStrategy()) .build(); HttpComponentsClientHttpRequestFactory requestFactory = new HttpComponentsClientHttpRequestFactory(httpClient); return requestFactory; } @LoadBalanced @Bean public RestTemplate restTemplate(RestTemplateBuilder builder) { return builder .setConnectTimeout(Duration.ofMillis(100)) .setReadTimeout(Duration.ofMillis(500)) .requestFactory(this::requestFactory) .build(); } } ## 2.3 验证 服务注册结果 ## ![在这里插入图片描述][watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTE4MTQ5_size_16_color_FFFFFF_t_70] 注意: * 本地运行的时候,consul服务重启后, 节点无法重新自动注册到 注册中心,需要重启节点服务; * 在网上看到 consul 集群模式的时候,还有节点上下线节点信息无法更新问题; [https_www.hashicorp.com_products_consul]: https://www.hashicorp.com/products/consul/ [https_github.com_hashicorp_consul]: https://github.com/hashicorp/consul [https_jingyan.baidu.com_article_ca41422f732f961eaf99ed5f.html]: https://jingyan.baidu.com/article/ca41422f732f961eaf99ed5f.html [watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzM2OTE4MTQ5_size_16_color_FFFFFF_t_70]: /images/20211211/85a2894bca5a4e7e9c87cdae35789a89.png
还没有评论,来说两句吧...