美文网首页
消息中间件使用小结

消息中间件使用小结

作者: Cheava | 来源:发表于2019-01-25 20:17 被阅读4次

    消费者宕机

    解决方法:消费者取消自动Ack,改为手动Ack消息


    image
    image
    image

    中间件宕机

    解决方法:定位queue为持久化,同时发送的每条消息设置为持久化

    channel.queueDeclare(
           "warehouse_schedule_delivery",
            true, //queue是否为持久化
            false,
            false,
            null);
    
    channel.basicPublish(
     "", 
     "warehouse_schedule_delivery",
     MessageProperties.PERSISTENT_TEXT_PLAIN,//设置持久化
     message.getBytes());
    
    image

    消费者消息积压

    通过 “channel.basicQos(10)” 这个方法来设置当前 channel 的 prefetch count。

    RabbitMQ 官方给出的建议是 prefetch count 一般设置在 100~300 之间。

    消费者处理异常

    try{
        //正常完成,手动确认消息
        channel.basicAck(
                delivery.getEnvelope().getDeliveryTag(), 
                true);
    }catch(Exception e){
        //出现异常,回复消息未完成
        channel.basicNack(
                delivery.getEnvelope().getDeliveryTag(), 
                true);
    }
    
    image

    生产者投递确认

    image

    confirm 机制投递消息是高延迟的,因此有以下要求:

    1. 用来临时存放未 ack 消息的存储需要承载高并发写入,如 kv 存储
    2. 投递消息之后等待 ack 的过程必须是异步的,通过异步回调完成ack、nack以及超时的处理
    image

    参考资料

    https://juejin.im/post/5c190f02518825046c2f6a5c MQ收发实例和异常处理
    https://juejin.im/post/5c1e51fd6fb9a049a81f4f35 MQ持久化
    https://juejin.im/post/5c3604abe51d45522a41f4b0 方案考虑
    https://juejin.im/post/5c3b392e518825255d296f78 消费者吞吐量
    https://juejin.im/post/5c3759fe51882525616dbaf6 消费者ack机制
    https://juejin.im/post/5c3c9fb3f265da61461e625b 生产者confirm机制

    相关文章

      网友评论

          本文标题:消息中间件使用小结

          本文链接:https://www.haomeiwen.com/subject/rbvvjqtx.html