目录
一、consul的使用
1.1、主要功能
1.2、安装及运行
1.3、添加微服务到consul
1.3.1、8001微服务添加相关pom、配置文件、注解
1.3.2、80微服务添加相关pom、配置文件、注解
1.4、三个注册中心异同
1.5、consul进行分布式配置
1.5.1、修改8001的yml配置文件
1.5.2、在consul中进行配置
1.6、配置动态刷新
一、consul的使用
1.1、主要功能
服务发现、健康监测、KV存储、多数据中心、可视化web界面
1.2、安装及运行
解压即可
访问地址:http://localhost:8500/
1.3、添加微服务到consul
1.3.1、8001微服务添加相关pom、配置文件、注解
<!--SpringCloud consul discovery --><dependency><groupId>org.springframework.cloud</groupId><artifactId>spring-cloud-starter-consul-discovery</artifactId></dependency>
spring:application:name: cloud-payment-servicedatasource:type: com.alibaba.druid.pool.DruidDataSourcedriver-class-name: com.mysql.cj.jdbc.Driverurl: jdbc:mysql://localhost:3306/cloud2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: 123456####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:service-name: ${spring.application.name}
在主启动类上添加
@EnableDiscoveryClient
1.3.2、80微服务添加相关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####Spring Cloud Consul for Service Discoverycloud:consul:host: localhostport: 8500discovery:prefer-ip-address: true #优先使用服务ip进行注册service-name: ${spring.application.name}
在主启动类上添加
@EnableDiscoveryClient
config配置类
@Bean@LoadBalancedpublic RestTemplate restTemplate(){return new RestTemplate();}
controller层
public static final String URL = "http://cloud-payment-service";
1.4、三个注册中心异同
AP架构
当网络分区出现后,为了保证可用性,系统B可以返回旧值,保证系统的可用性。
当数据出现不一致时,虽然A, B上的注册信息不完全相同,但每个Eureka节点依然能够正常对外提供服务,这会出现查询服务信息时如果请求A查不到,但请求B就能查到。如此保证了可用性但牺牲了一致性结论:违背了一致性C的要求,只满足可用性和分区容错,即AP
CP架构
当网络分区出现后,为了保证一致性,就必须拒接请求,否则无法保证一致性,Consul 遵循CAP原理中的CP原则,保证了强一致性和分区容错性,且使用的是Raft算法,比zookeeper使用的Paxos算法更加简单。虽然保证了强一致性,但是可用性就相应下降了,例如服务注册的时间会稍长一些,因为 Consul 的 raft 协议要求必须过半数的节点都写入成功才认为注册成功 ;在leader挂掉了之后,重新选举出leader之前会导致Consul 服务不可用。结论:违背了可用性A的要求,只满足一致性和分区容错,即CP
1.5、consul进行分布式配置
1.5.1、修改8001的yml配置文件
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/cloud2024?characterEncoding=utf8&useSSL=false&serverTimezone=GMT%2B8&rewriteBatchedStatements=true&allowPublicKeyRetrieval=trueusername: rootpassword: 123456profiles:active: dev # 多环境配置加载内容dev/prod,不写就是默认default配置# ========================mybatis===================
mybatis:mapper-locations: classpath:mapper/*.xmltype-aliases-package: com.cjc.cloud.entitiesconfiguration:map-underscore-to-camel-case: true
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
1.5.2、在consul中进行配置
文件创建格式:config/cloud-xxx-dev/data
1.5.3、测试代码
@Value("${server.port}")private String port;@GetMapping("/pay/info")public ResultData getInfo(@Value("${cjc.info}") String info){return ResultData.success("info:" + info + " port:" + port);}
1.6、配置动态刷新
在服务主启动类上添加注解
@RefreshScope //动态刷新