1·spring cloud 提供分布式系统工具
配置中心、服务发现、熔断(超时错误处理)、路由(拦截)、微代理、控制总线、leader选举、分布式session、集群状态
2·已接触子项目
config,配置项目+配置中心(本地、git、subversion)
netflix,开发工具包,包括eureka、hystrix、zuul、archaius等
hystrix,容错管理工具
zuul,边缘服务工具,提供动态路由,监控,弹性,安全服务
3·服务发现模块
1·pom文件
spring-cloud-starter-eureka-server
2·在APP类上添加@EnableEurekaServer注解
3·配置文件
server.port=1111
#禁用它的客户端注册行为
eureka.client.register-with-eureka=false
eureka.client.fetch-registry=false
#注册中心地址
eureka.client.serviceUrl.defaultZone=http://localhost:${server.port}/eureka/
4·生产者
1·pom依赖
spring-cloud-starter-eureka
2·在APP类上添加@EnableDiscoveryClient注解
3·配置信息
#服务实例名
spring.application.name
server.port=2222
eureka.client.serviceUrl.defaultZone=http://localhost:1111/eureka/
5·消费者
1·使用ribbon做负载均衡
ribbon是基于http和tcp客户端的负载均衡器,通过客户端中配置的ribbonServerList服务端列表去轮询访问
当ribbon和eureka联合时,ribbobServerList被discoveryEnabledNIWSServerList重写,扩展为从eureka注册中心获取服务端列表。同时用NIWSDiscoveryPing来去掉IPing
2·ribbon使用
pom依赖:spring-cloud-starter-ribbon
APP类上@EnableDiscoveryClient
注解来添加发现服务能力,@EnableFeignClients注解请求其他服务
APP类中创建restTemplate实例,并通过@loadBalanced+@bean注解开启负载均衡
6·断路器(处理延时、出错故障)
向调用方返回一个错误相应,而不是长时间的等待
spring cloud中使用hystrix
使用
1·pom依赖
spring-cloud-starter-hystrix
2·APP类上@EnableCircuitBreaker来开启断路器功能
3·在使用ribbon消费服务的函数上增加@HystrixCommand
注解来指定回调方法。
feign使用Hystrix
pom不需要引入hystrix,feign中已经依赖了
使用@feignClient注解的fallback属性指定回调类
创建回调类实现这个借口,实现错误处理方法
7·配置中心
原理
git上存放配置文件
config-server连接到git
config-client连接到config-server
启动config-client时,config-client通过config-server拿到远程git上的配置文件,通过soring加载到对象中
使用
1·添加pom依赖
spring-cloud-config-server
2·APP类上@EnableConfigServer
3·配置文件
spring.application.name=config-server
server.port=7001
spring.cloud.config.server.git.uri=http://git.oschina.net/zjb_china/SpringCloud-Learning
spring.cloud.config.server.git.searchPaths=Chapter9-1-4/config-repo
spring.cloud.config.server.git.username=username
spring.cloud.config.server.git.password=password
4·仓库一般有四类文件
-
- users.properties
- users-dev.properties
- users-test.properties
- users-prod.properties
5`url和配置文件的映射关系
/{label}/{application}-{profile}.yml,{label}对应git上不同的分支,默认为master
例:要访问dev2分支,users应用的prod环境,可以通过:http://localhost:7001/users/prod/dec2
6`消费者如何获取配置信息
1`pom依赖:spring-cloud-starter-config
2`boostrap.yml配置config-server
spring.application.name=users
spring.cloud.config.profile=test
spring.cloud.config.label=dev2
spring.cloud.config.discovery.serviceId=config-server
spring.cloud.config.discovery.enabled=true
server.port=7002
3`@Value("${from}")
private String from;绑定配置服务中心配置的from属性
7·不重启config-client情况下更新配置信息
client中添加pom依赖:spring-boot-starter-actuator
在需要自动更新配置的java类上@RefreshScope 修饰
以后更新git上配置文件时候,config客户端执行http://localhost:8080/refresh 就可以更新刷新配置变量到内存中了
那么问题来了,集群怎么办?
使用spring cloud bus解决
需要依赖AMQP、Redis、Kafka组件