RabbitMQ消息确认与消息重新入队

消息确认

当生产者投递消息到消费者broker会立即从内存中将消息删除,在这种情况下,杀掉一个消费者将会丢失消息。

为了确认消息不会丢失,rabbitmq支持message acknowledgments。一个ACK的响应会从消费端返回,告诉rabbitmq一个特定的消息已被接收。

当rabbitmq空闲时会处理它,将它删除。

如果一个消费者挂掉(channel被关闭、connection被关闭或者TCP 连接被关闭)而没有发送ACK,那么rabbitmq会让这个消息重新入队。

如果在同一时间内有其他的消费者连接了,他快被快速的投递到其他的消费者那。即使工作者偶尔挂掉,这种方式下也可以确定没有消息会丢失。

没有任何的消息超时,当消费者挂掉,rabbitmq将重新投递这些消息。对于处理一个消息需要非常非常长的时间也没关系因为不会超时。

消息的ack默认是打开的,默认标记是autoAck=true,当完成了任务得到了ack响应那么可以删除掉这个标记,也就是autoAck=false。

示例代码在官网有详细的说明:http://www.rabbitmq.com/getstarted.html,第二个选项 Work queues页中有Message acknowledgment,选择自己对应的语言即可。

消息重新入队

basicRecover:是路由不成功的消息可以使用recovery重新发送到队列中。


basicReject:是接收端告诉服务器这个消息我拒绝接收,不处理,可以设置是否放回到队列中还是丢掉,而且只能一次拒绝一个消息,官网中有明确说明不能批量拒绝消息,为解决批量拒绝消息才有了basicNack。

basicNack:可以一次拒绝N条消息,客户端可以设置basicNack方法的multiple参数为true,服务器会拒绝指定了delivery_tag的所有未确认的消息(tag是一个64位的long值,最大值是9223372036854775807)。

示例代码:

官网中有明确的代码示例:http://www.rabbitmq.com/nack.html

API结合具体的业务应用。

转载于:https://my.oschina.net/lzhaoqiang/blog/712095

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值