springcloud技术简介
eureka
服务的注册与发现,客户端向服务端注册实例,调用方拿到这些注册的实例就可以在服务之间相互调用
面试点:客户端默认每30s会向服务端发送一个心跳请求,如果没有收到这个请求,就会暂时把这个请求移除。
ribbon
实现了后台的负载均衡功能
常用的有:随机策略,响应时间加权重,最低并发策略
restTemplate.getForObject(PAYMENT_URL+"/payment/create/"+payment,String.class);
feign(常用一点)
我们只需要创建一个接口,来配置远程调用的接口,在接口上加上@FeignClient(value="FEIGN-SERVICE")
这样写更符合我们平时的开发习惯,减少了ribbon调用时返回的封装和解析。
Hystrix
服务的降级和熔断
在正常情况下如果一个接口的并发太高,会导致整个系统的其他服务也会变慢,这是因为tomcat里面的请求线程已经被使用完
@EnableCiruitBreaker开启降级
统一降级处理:@DefaultProperties(defaultFallback="globalFallbackMethod")
特殊接口:@HystirxCommand(
fallbackMethod="timeOutHandler",commandProperties = {
@HystrixProperty(name="execution.isolation.thread.timeoutInMilliseconds",value = "2000")
)
服务熔断就是减少错误的响应延迟
当断路器打开后,将不会调用接口的主逻辑,而是直接调用降级方法。
hystrix会开启一个休眠时间窗,在这个时间内接口的主逻辑是降级方法。
当休眠时间窗到期后,会释放一次请求到接口逻辑中,如果请求正常了,断路器就会关闭,恢复主逻辑;如果依然有问题,休眠时间窗会重新计时。
@HystrixCommand(fallbackMethod = "paymentCircuitBreaker_fallback",commandProperties = {
@HystrixProperty(name = "circuitBreaker.enabled",value = "true"),// 是否开启断路器
@HystrixProperty(name = "circuitBreaker.requestVolumeThreshold",value = "10"),// 请求次数,超过这个次数,后面的失败率才会生效
@HystrixProperty(name = "circuitBreaker.sleepWindowInMilliseconds",value = "10000"), // 时间窗口期
@HystrixProperty(name = "circuitBreaker.errorThresholdPercentage",value = "60"),// 失败率达到多少后跳闸
})
服务的网关
Gateway
Route(路由):它由ID,目标URI,一系列的断言和过滤器组成,如果断言为true则匹配该路由
Predicate(断言):发人员可以匹配HTTP请求中的所有内容(例如请求头或请求参数),如果请求与断言相匹配则进行路由
Filter(过滤器):指的是Spring框架中GatewayFilter的实例,使用过滤器,可以在请求被路由前或者之后对请求进行修改,比如跨域问题
routes:
- id: payment_routh #payment_route #路由的ID,没有固定规则但要求唯一,建议配合服务名
#uri: http://localhost:8001 #匹配后提供服务的路由地址
uri: lb://cloud-payment-service #匹配后提供服务的路由地址
predicates:
- Path=/payment/get/** # 断言,路径相匹配的进行路由
implements GlobalFilter,Ordered
服务的配置
不同环境不同配置,动态化的配置更新,分环境部署比如dev/test/prod/beta/release
当配置发生变动时,服务不需要重启即可感知到配置的变化并应用新的配置
将配置信息以REST接口的形式暴露
服务端
@EnableConfigServer
spring:
cloud:
config:
server:
git:
uri: https://github.com/yyttx/springcloud-config.git #GitHub上面的git仓库名字
####搜索目录
search-paths:
- springcloud-config
####读取分支
label: main
客户端
要将Client模块下的application.yml文件改为bootstrap.yml,这是很关键的,
因为bootstrap.yml是比application.yml先加载的。bootstrap.yml优先级高于application.yml
@RefreshScope 动态刷新配置
消息总线(目前只支持kafka、RabbitMQ)
如果系统由kafka变为RabbitMQ,这工作量是很大的,所这时候spring cloud stream帮我们解耦了

浙公网安备 33010602011771号