RabbitMQ消息应答概念

学习笔记

生产者发送消息到队列中,消费者需要完成这个任务,并且处理信息,那么队列中的信息就会被删除掉;
那么如果消费者处理这个任务所需要的时间很长,队列中的信息已经被删除了,而消费者线程挂掉了;
那么就会造成这一条信息的丢失,这是不可取的。
所以需要一种消息应答机制来处理这一个问题。简而言之,就是消费者处理这条信息完成之后;
告诉mq这条信息已经处理完毕,然后mq才把这一条信息从队列中删除,这样就可以避免信息丢失的问题。

自动应答:当消费者接收到信息的时候,自动告诉mq处理完毕信息,及消息发送后立即被认为已经传送成功,但是实际上还没有处理完毕。
这种模式需要在高吞吐量和数据传输安全性方面做权衡。因为这种模式如果消息在接受之前,消费者那边出现连续或者channel关闭,那么消息就丢失了,
当然另一方面消费者可以传递过载的信息,没有对传输的消息数量进行限制。当然这样有可能使得消费者这边由于接收太多的消息而来不及处理,
导致这些消息的积压,最终导致内存耗尽,消费者线程被操作系统杀死。所以,
这种自动应答模式适用的前提是,有一个良好的环境,不能出错、消费者处理信息的速率相当高。

手动应答:手动应答的好处是可以批量应答并且减少网络拥堵。分为三个方法
A.Channel.basicAck(用于肯定确认)
    MQ已经知道该消息被成功处理了,可以将其丢失了
B.Channel.basicNack(用于否定确认)
C.Channel.basicReject(用于否定确认)
    比Channel.basicNack少一个参数
    不处理该消息了直接拒绝,可以将其丢弃了

channel.basicAck(deliveryTag,true) true就代表multiple

multiple的true和false代表不同意思
    true代表批量应答channel上未应答的消息
        比如说channel上有传递tag的消息5,6,7,8当前tag是8 那么此时
        5-8的这些还未应答的消息都会被确认收到消息应答
    false同上面相比
        只会应答tag=8的消息5,6,7这三个消息依然不会被确认收到信息应答

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值