RabbitMQ相关问题

服务启动失败

  1. 问题出现场景:

    服务启动失败 之前启动成功过

  2. 问题排查:

    1. 检查端口冲突

      1. rabbitmq-server -detached
    2. 检查日志文件:erl_crash.dump的Slogan的值中找

      1. duplicate_node_name:节点名字重复
      2. rabbit_memory_monitor:磁盘空间不足
      3. start failed with file locked:文件被锁定
    3. 解决方案:

      1. 停止节点
        1. 停止所有节点:rabbitmqctl stop
        2. 停止指定节点:rabbitmqctl -n 节点名 stop
      2. 清理磁盘空间
      3. 检查文件权限

    重启服务

## 消费失败问题

  1. 出现场景:
    1. 微信token过期
    2. 网络波动
    3. 业务逻辑、代码问题
    4. RabbitMQ服务器出现故障或崩溃
    5. 消费超时
  2. 解决方案:
    1. 优化业务代码逻辑、sql
    2. 使用消息确认机制和事务机制
    3. 设置消息唯一标识
    4. 合理安排消费者
    5. 使用集群

消息丢失问题

根据数据模型可以分为生产者、消息队列、消费者三个维度进行分析

  1. 生产者
    1. 提交时丢失:事务机制:利用异常回滚的特点保证业务和消息的原子性从而保证一致性
    2. 发送时丢失:确认机制:将路由通道设置为confirm模式,通过唯一id和消息执行状态来判断生产者中消息是否路由成功
  2. 消息队列
    1. 持久化机制:配合confirm模式和事务机制进行将消息存储在磁盘上,保证当服务宕机时数据不丢失
  3. 消费者
    1. 手动ACK机制:存在重复消费、性能下降的隐患
    2. 错误日志机制:异常捕获记录日志

消费有序性问题

  1. 队列与消费者一对一:通过一定规则进行拆分队列,然后被拆分的队列可满足按顺序消费
  2. 加顺序字段:判读顺序字段从而判断消息顺序

消息堆积问题

  1. 出现场景:生产者的生产速度与消费者的消费速度不匹配
    1. 消费者消费能力弱
    2. 消息消费失败反复重试
    3. 消费端出了问题,导致不消费了或者消费极其慢
  2. 解决方案:
    1. 优化代码逻辑
    2. 合理设置消费端数量(多线程批量消费)
    3. 临时扩容处理堆积的消息
    4. 重导:当设置了过期时间后,虽然没有了大量消息积压,但是会丢失大量数据,所以将即将过期的消息先持久化,然后写一个脚本将重新发送到mq中
    5. 采用手动丢弃+重导机制
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值