RabbitMq之应答模式
RabbitMq应答模式两种:
1.自动应答: 不在乎消费者对消息处理是否成功,都会告诉队列删除消息。如果处理消息失败,实现自动补偿(队列投递过去 重新处理)。
2.手动应答: 消费者处理完业务逻辑,手动返回ack(通知)告诉队列处理完了,队列进而删除消息
而手动应答有如下三个方法
| 方法 | 作用 |
|---|---|
| Channel.basicAck | 用于肯定确认 |
| Channel.basicNack | 用于否定确认 |
| Channel.basicReject | 用于否定确认(不处理该消息了直接拒绝,可以将其丢弃了) |
注意:手动应答时还有一个参数:Multiple 是否批量处理,一般选择false ,不批量处理。
批量处理图解如下

手动应答开启如下
//消息的接收手动应答
boolean autoAck = false;
channel.basicConsume(TASK_QUEUE_NAME,autoAck,deliverCallback,cancelCallback);//确认接收消息的回调
DeliverCallback deliverCallback = (consumerTag, message) ->{System.out.println("接收到的消息"+new String(message.getBody()));/*** 手动应答* 1.消息的标记 tag* 2.是否批量应答*/channel.basicAck(message.getEnvelope().getDeliveryTag(),false);};
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
