消息的确认

1、消费端确认
自动确认:message出队列的时候自动确认【broke】
手动确认:message出队列之后,要应用程序去确认是否已经消费完毕
basic提供了哪些方法来做这些事情
1)、自动确认
BasicGet("mytest",true);
2)、手动确认
BasicGet("mytest",false);
BasicAck(result.DeliveryTag,false);
void BasicAck(ulong deliveryTag,bool multiple)
multiple:true =>x<deliveryTag的所有message都会被确认

3)、手工拒绝:consumer 拒绝服务器发送过来的信息
i:遗弃
BasicReject(result.DeliveryTag,false);
ii:给queue
BasicReject(result.DeliveryTag,true);

拒绝多个
BasicNack();

4)、重新递送【商家补发】
BasicRecover();
true 同一个consumer消费
false 可能被其他consumer消费

2、发布端(生产端)的确认
1)confirm机制
channel.ConfirmSelect();
发送动作
var isallpubished=channel.WaitForConfirms();


2)tx机制 【事务控制】
publish 送message到rabbitmq中,我们一定要知道,这个消息已经发送成功了,也就是,rabbitmq一定要告诉publish,这条消息已经被确定收到。
try catch
channel.TxSelect();
发送动作
var isallpubished=channel.TxCommit();

异常 channe.TxRollback();

均影响性能: confirm<tx机制【最消耗性能】

原文地址:https://www.cnblogs.com/sailing92/p/13711200.html