ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

RabbitMQ-Ack确认机制与消费端限流

2020-11-21 14:03:43  阅读:356  来源: 互联网

标签:deliveryTag Ack ChannelAwareMessageListener 签收 限流 RabbitMQ message true channel


@Component
public class AckListener implements ChannelAwareMessageListener {
/**
* 1、设置手动签收:acknowledge="manual"
* 2、监听器实现接口ChannelAwareMessageListener
* 3、如果消息成功,调用basicAck()签收
* 4、如果消息失败,调用basicNack()拒绝签收,broker重新发送给consumer
* @param message
*/
@Override
public void onMessage(Message message, Channel channel) throws Exception {
Thread.sleep(1000);
long deliveryTag = message.getMessageProperties().getDeliveryTag();
try {
//接收消息
System.out.println(new String(message.getBody()));
//处理业务逻辑
System.out.println("处理业务逻辑。。。");
//int i=3/0;//产生错误
//手动签收
channel.basicAck(deliveryTag,true);
}catch (Exception e){
channel.basicNack(deliveryTag,true,true);
}
}
}

配置:

<!--定义监听器容器 acknowledge设置消息签收模式 prefetch设置消费端限流-->
<rabbit:listener-container connection-factory="connectionFactory" acknowledge="manual" prefetch="1" >
<rabbit:listener ref="ackListener" queue-names="queue_confirm"></rabbit:listener>

</rabbit:listener-container>

标签:deliveryTag,Ack,ChannelAwareMessageListener,签收,限流,RabbitMQ,message,true,channel
来源: https://www.cnblogs.com/Pudge-FreshMeat/p/14015475.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有