消息中间件

解决的问题
  • 异步、削峰/限流、解耦

    要考虑的问题
  • 高可用(集群)

  • 数据丢失
  • 顺序消费
  • 重复消费

    数据的消费
  • 消息队列有数据,主动让消费者消费(push)

  • 消费者不断去轮询队列(pull)

    重复消费
  • 幂等校验

    顺序消费

扩展:幂等处理
  • 幂等概念:属于数学与计算学概念。指同一个操作,一次和多次执行的结果都是一样的。
    • 如前端表单的提交、同一支付请求、同一个订单创建请求等都需要幂等。
    • 数据库的查询、删除操作是天然幂等的。
  • 实现方案
    • 唯一索引,用户-资金账户。
    • tocken机制,防止页面重复提交,要求页面的数据只能被点击一次。发送原因:由于重复提交或nginx重发等情况会导致数据被重复提交。
      • 解决:集群:token +redis
      • 单JVM:token +redis或者token+JVM内存
    • select + insert(简单)
    • 悲观锁
    • 乐观锁
      • 通过版本号
      • 通过限制条件
      • ps最好主键或唯一索引更改是行锁,否则是表锁
    • 分布式锁
      • 构建全局唯一字段(、雪花算法)