zoukankan      html  css  js  c++  java
  • 消息队列(以MQ为例)

    引言

      本文主要描述有关 消息队列的作用和使用场景;除此之外,再分析消息通信中发生的“消息丢失”、“消息重复”、“消息堆积”等问题

    消息队列的作用

      本质:解决(跨平台)通信问题、主要用于存储和转发

      消息队列的核心:异步、解耦(取消同步业务之间的耦合性、依赖性)、削峰(流量削峰、排队、限流)

      关于限流的几个操作:

    1. 服务端  disc-->RAM
    2. 消费端  basicQos-->同时处理数

    消息丢失

      整个通信的流程:生产者(发送消息)--> 消息中间件(MQ/Redis)--> 消费者(接收消息/回调)

      出现消息丢失的情况,以及对应措施

    1. 生产者-->MQ   
      • 服务端MQ收到发送者消息的时候,进行确认:可以通过事务模式、确认模式
    2. Exchange-->Queue
      • 回发:return、生产者
      • 备份:队列/交换机 
    3. 队列
      • 持久化序列
      • 消息本身的持久化
    4. 消费者监听队列
      • 自动——接收到消息就发送
      • 手动——basicAsc();方法

    消息重复(幂等性处理)

      如何避免消息重复?—— 使用msgId 消息唯一id,进行重复控制

    消息堆积

      如何处理消息堆积的情况?——重启消息服务端(有做持久化的情况下)、清空、加消费者线程加强消费消息

    MySQL数据库事务隔离级别

      什么是数据库事务? ——  start、transaction、begin、commit、最小操作单元 DML

      插件式的存储引擎 —— 以 table 的形式存储在磁盘中,所有会需要有格式(innoDB、Mylsam、csv、memory)不同的格式,对应不同的插件式存储引擎

      事务 —— 数据一致性 (MySQL 5.5 更新为默认为innoDB)

      事务操作中可能产生的问题:脏读:(未提交)、不可重复读:(已提交、修改/删除)、幻读:(已提交、新增)

      事务的四种隔离级别:未提交读(未解决问题)、已提交读(解决脏读)、不可重复读(可重复读)、串行化

       如何保证一个事务中前后两次读取数据结果一致?

      1. 当前读:锁  LBCC
      2. 快照读:备份(快照) MVCC —— 查询时通过判断初次查询的标记(flag)
  • 相关阅读:
    十二月十学习报告
    十二月八学习报告
    十二月七学习报告
    学习笔记187—在线会议共享PPT时,设置让观众看不到备注,而自己能看到【腾讯会议】
    学习笔记186—打印机可以打印测试页,但是通过WPS或Word无法打印文档?
    《程序员的自我修养》读书有感 其一
    Linux下的单向ping通问题
    做一个Pandas专家,教你如何用它高效处理大量数据
    grpc python 源码分析(1):server 的创建和启动
    grpc python 源码分析(2):server 处理请求
  • 原文地址:https://www.cnblogs.com/huanghzm/p/11842823.html
Copyright © 2011-2022 走看看