Consul是一种用于服务发现、配置和分布式协调的开源工具。Consul提供了以下主要功能:
1.服务发现:Consul允许开发人员在微服务架构中注册和发现服务。它可以自动检测新添加的服务并为它们分配唯一的网络地址。
2.健康检查:Consul可以定期检查注册的服务的健康状况,以确保它们正常运行并能够提供服务。如果服务不可用,Consul会自动将其从服务注册表中移除。
3.分布式键值存储:Consul提供了一个分布式键值存储,可以用于存储配置信息、应用程序状态等。
4.多数据中心支持:Consul支持跨多个数据中心的部署,并提供了强大的数据中心间的服务发现和同步功能。
5.安全性:Consul提供了基于ACL的安全机制,可以通过访问控制列表来限制对服务和资源的访问。
consul agent -dev //开发者模式启动consul,打来后不要关闭cmd窗口
url地址: http://localhost:8500
把8001端口的服务注册进consul
//在对应端口的pom文件添加依赖
<!--SpringCloud consul discovery --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId><exclusions><exclusion><groupId>commons-logging</groupId><artifactId>commons-logging</artifactId></exclusion></exclusions></dependency>spring:application:name: cloud-consumer-order
//添加yml文件配置
####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}在启动类上添加注解 @EnableDiscoveryClient 再启动
//80端口的controller类中调用8001端口
public static final String paymentSrv_URL = "http://cloud-payment-service";//80端口下config下RestTemplateConfig类添加@LoadBalanced标签
@Configuration
public class RestTemplateConfig {@Bean@LoadBalancedpublic RestTemplate restTemplate() {return new RestTemplate();}
}
除了常见的Consul(CP) 还有Eureka(AP) Zookeeper(CP)
CP:强调一致性
AP:强调可用性
当下每个微服务都有application.yml配置文件,繁琐且不易修改,这亦可以利用Consul解决
//添加pom依赖
<!--SpringCloud consul config-->
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-config</artifactId>
</dependency>
<dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-bootstrap</artifactId>
</dependency>//bootstrap.yml内容spring:application:name: cloud-payment-service####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}config:profile-separator: '-' # default value is ",",we update '-'format: YAML# config/cloud-payment-service/data# /cloud-payment-service-dev/data# /cloud-payment-service-prod/data//application.yml内容server:port: 8001# ==========applicationName + druid-mysql8 driver===================
spring:datasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: rootprofiles:active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置# ========================mybatis===================
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.dc.cloud.entitiesconfiguration:map-underscore-to-camel-case: true//在consul添加配置,注意配置文件夹格式//在controller中添加@Value("$server.port")private String port;@GetMapping("/pay/get/info")public String getInfoByConsul(@Value("${dc.info}") String dcInfo){return "dcInfo:" + dcInfo+"\t"+"port:" + port;}
Consul 动态及时刷新
//启动类添加 @RefreshScope 注解//修改bootstrap.yml配置 但一般不要改,默认55秒watch:wait-time: 1
Consul持久化配置