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

消息中间件使用小结

作者: 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