zoukankan      html  css  js  c++  java
  • mq常见问题

    1、优点

    异步,削峰,解耦

    2、缺点

    1)稳定性变差,依赖mq,如果mq挂了就导致系统崩溃。

    2)系统复杂性提高,要解决消息丢失、重复消费、顺序消费等问题。

    3)一致性问题,A系统推送到三个消息由B、C、D去消费,BC成功,D失败,此时A认为已经成功了,一般用分布式锁来处理。

    3、如何保证高可用

    namserver配置集群

    broker配置双主双从

    4、消息丢失了怎么办?

    分析三种情况:
    1)生产者没有成功将消息推送到broker

    2)消息推送到borker,然后broker宕机了,此时存在缓存中的消息丢失

    3)消息由broker推送到消费者,但消费者没有成功消费这笔数据,但broker认为这笔数据已经消费,不会再重复推送了。

    解决方案:

    1)生产者消息发送到MQbroker后,MQ给生产者一个确认收到

    2)MQbroker收到消息后,持久化这条数据

    3)消费者成功消费信息后进行ack确认

    4)MQ收到消费这ack确认后删除这条数据。

    5、怎么保证消息不被重复消费

    一般原因是网络延迟,导致MQ长时间没收到确认,然后重复又发了一笔消息

    消息发送者发送消息时携带一个全局唯一id,消费者消费前先判断id是否在于reidis或者db有消费记录,如果没有则消费,并将消费记录存在库里 

    6、怎么保证消息按照顺序消费

    一个订单有订单创建,订单付款,订单完成,这个需要顺序消费,但是多个订单可以并行消费。(不会要求全局消费,因为)

    解决:生产者根据每个订单id将同一个订单的三条信息放到一个Queue中,多个消费者同时获取queue中的消息进行消费,MQ使用分段锁保证单个订单三条消息的发送顺序消费的

    Queue有序消费

    生产者MessageQueueSelecter匿名内部类,消费者使用MessageListenerOrderly()匿名内部类

    7、大量消息堆积怎么办

    检查消费端是否正常,临时写代码将堆积的消息转存到容量更大的的MQ集群,增加多个消费者节点并行消费堆积信息,消费完毕后,恢复原始架构

    8、消息过期了怎么办

    1)发送者可以给消息定制一个时间,过期的消息放到死信队列,死信队列的消费者将消息放到数据库,然后从数据库再把这些数据重新查询出来发送到mq。

  • 相关阅读:
    今天是周日,一如既往的在加班
    懒出来的框架
    把Visio文档中形状信息导出到XML文件的VBA代码
    DataGridView多线程更新数据的问题的解决办法
    为VS定制一个自己的代码生成器
    安装VS2012之后自己开发的自定义工具没法使用问题的解决办法
    通过RSA进行私钥加密公钥解密算法的进一步改进
    程序员在职场 该反思了吗?
    图片与字节数组相互转换的方法
    jQuery Ajax 方法调用 Asp.Net WebService 的详细例子
  • 原文地址:https://www.cnblogs.com/wenwenzuiniucha/p/14856174.html
Copyright © 2011-2022 走看看