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 Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
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
@LoadBalanced
public 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 Discovery
cloud:
consul:
host: localhost
port: 8500
discovery:
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.DruidDataSource
driver-class-name: com.mysql.cj.jdbc.Driver
url: jdbc:mysql://localhost:3306/db2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=true
username: root
password: root
profiles:
active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置
# ========================mybatis===================
mybatis:
mapper-locations: classpath:mapper/*.xml
type-aliases-package: com.dc.cloud.entities
configuration:
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持久化配置