https://www.cnblogs.com/zhaoyansheng163/p/11745654.html
https://www.iteye.com/blog/uule-2439190
MQ消息确认机制:
生产者需求确认问题:
一是确认是否到达交换器
二是确认是否到达队列
消费者需求确认问题:
一、如何防止消息丢失或未被成功处理;
1、在启动MQ侦听服务时配置这个参数:
acknowledge-mode :manual //每条消息必须手工确认
2、在真正接收到消息时,先不回复确认,而是先处理业务逻辑,处理成功后回复确认,
此时MQ会将该消息删除;业务逻辑处理失败则回复拒绝,
然后将消息登记到异常表,有专门的异常处理程序处理。
可以确保每个消息是需要消费者手工确认的。
二、如何防止消息被重复消费(尤其是在消费者服务集群的情况下);
注意:
MQ本身是基于异步的消息处理,前面的示例中所有的生产者(P)将消息发送到RabbitMQ后不会知道消费者(C)处理成功或者失败(甚至连有没有消费者来处理这条消息都不知道)。
但实际的应用场景中,我们很可能需要一些同步处理,需要同步等待服务端将我的消息处理完成后再进行下一步处理。这相当于RPC(Remote Procedure Call,远程过程调用)。在RabbitMQ中也支持RPC。
【RabbitMQ开启手动ack机制保证消费端数据不丢失的时候,prefetch机制对消费者的吞吐量以及内存消耗的影响。
通过分析,我们知道了prefetch过大容易导致内存溢出,prefetch过小又会导致消费吞吐量过低,所以在实际项目中需要慎重测试和设置。】
//完整的mq学习文档
https://www.cnblogs.com/zwwhnly/p/10953388.html
https://www.liangzl.com/get-article-detail-140885.html