springcloud

SpringCloud简介与5大常用组件

服务发现-Netflix Eureka

SpringCloud之Eureka注册中心原理及其搭建

客服端负载均衡—Netflix Ribbon
  1. Ribbon详解
  • 核心:服务发现,服务选择规则,服务监听
  • 主要组件:ServerList(获取可用地址), ServerListFilter(过滤), IRule(负载均衡规则)

用处

  • RestTemplate(@LoadBalanced)
  • Feign
  • Zuul
  1. Http和RPC
  2. SpringCloud中服务间两种restful调用方式

RestTemplate

  • RestTemplate简介
  • RestTemplate 用法详解

Feign

  • Feign设计原理
  • 声明式REST客户端(伪RPC,感觉上是本地调用)
  • 采用基于接口的注解
分布式配置——Spring Cloud Config

why

  • 方便维护
  • 配置内容的安全与权限
  • 更新配置项目无需重启

配置文件bootstrap与application的作用以及区别

SpringCloud Bus自动刷新配置

  • 引入spring-cloud-starter-bus-amqp
  • 使用消息队列机制(RabbitMQ)
  • github配置webhooks触发(借助natapp将本地地址映射成网络地址)

RabbitMQ

  • RabbitMQ教程
  • Spring Cloud Stream
  • RabbitMQ应用
  • 商品 —(库存变换)— 消息队列 —(库存变化)— 订单

product(在减库存的同时将消息写入mq)

  • private AmqpTemplate amqpTemplate;
  • amqpTemplate.convertAndSend(“productInfo”, JsonUtil.toJson(productInfoOutputList));

order(接收消,存储到redis中)

  • @RabbitListener(queuesToDeclare = @Queue(“productInfo”))
  • stringRedisTemplate.opsForValue().set(String.format(PRODUCT_STOCK_TEMPLATE,
    productInfoOutput.getProductId()),String.valueOf(productInfoOutput.getProductStock()));

同步流程

  1. 查询商品信息(调用商品服务)
  2. 计算总价(生成订单详情)
  3. 商品服务扣库存(调用商品服务)
  4. 订单入库(生成订单)

异步扣库存

  1. 库存在redis中保存
  2. 收到请求后,redis判断是否库存充足,减掉redis中库存
  3. 订单服务创建订单写入数据库,并发送消息
  4. 如果商品服务接收消息,扣库存失败,回滚redis数据
服务网关——Netflix Zuul
  • Zuul简介
  • 设置cookie sensitiveHeaders:

高可用

  • 多个Zuul节点注册到Eurake Server
  • Nginx和Zuul混搭
  • 应用

典型应用场景

  • 前置(Pre):限流; 鉴权; 参数校验调整
  • 后置(Post):统计; 日志

应用实例–权限校验(过滤器 )

  • /order/create 只能买家访问
  • /order/finish 只能卖家访问
  • /product/list 都可访问

应用实例–跨域设置

断路器——Netflix Hystrix
  • Hystrix简介
  • 功能

服务降级(优先核心服务,非核心服务不可用或弱可用)

  • 通过HystrixCommand注解指定
  • fallbackMethod(回退函数)中具体实现降级逻辑

服务熔断

  • @HystrixCommand(commandProperties = {
  • @HystrixProperty(name = “circuitBreaker.enabled”, value = “true”), //设置熔断
  • @HystrixProperty(name = “circuitBreaker.requestVolumeThreshold”, value = “10”), //请求数达到后才计算
  • @HystrixProperty(name = “circuitBreaker.sleepWindowInMilliseconds”, value = “10000”), //休眠时间窗(熔断器open状态与half close状态之间的间隔,此间隔内,降级逻辑为主逻辑,此间隔后,将释放请求到原来的主逻辑上,如果可以通过,关闭熔断)
  • @HystrixProperty(name = “circuitBreaker.errorThresholdPercentage”, value = “60”), //错误率(熔断器打开的条件)
  • })

依赖隔离
监控(Hystrix Dashboard)

你可能感兴趣的:(springcloud)