rabbitmq basicReject/basicNack/basicRecover的區(qū)別及說明
rabbitmq basicReject/basicNack/basicRecover區(qū)別
channel.basicReject(deliveryTag, true);
basic.reject方法拒絕deliveryTag對應(yīng)的消息,第二個參數(shù)是否requeue,true則重新入隊列,否則丟棄或者進入死信隊列。
該方法reject后,該消費者還是會消費到該條被reject的消息。
channel.basicNack(deliveryTag, false, true);
basic.nack方法為不確認deliveryTag對應(yīng)的消息,第二個參數(shù)是否應(yīng)用于多消息,第三個參數(shù)是否requeue,與basic.reject區(qū)別就是同時支持多個消息,可以nack該消費者先前接收未ack的所有消息。
nack后的消息也會被自己消費到。
channel.basicRecover(true);
basic.recover是否恢復消息到隊列,參數(shù)是是否requeue,true則重新入隊列,并且盡可能的將之前recover的消息投遞給其他消費者消費,而不是自己再次消費。
false則消息會重新被投遞給自己。
rabbitmq-BasicReject
拒收,是接收端在收到消息的時候響應(yīng)給RabbitMQ服務(wù)的一種命令,告訴服務(wù)器不應(yīng)該由我處理,或者拒絕處理,扔掉。
接收端在發(fā)送reject命令的時候可以選擇是否要重新放回queue中。
如果沒有其他接收者監(jiān)控這個queue的話,要注意一直無限循環(huán)發(fā)送的危險。
BasicDeliverEventArgs ea = (BasicDeliverEventArgs)consumer.Queue.Dequeue(); channel.BasicReject(ea.DeliveryTag, false);
BasicReject方法第一個參數(shù)是消息的DeliveryTag,對于每個Channel來說,每個消息都會有一個DeliveryTag,一般用接收消息的順序來表示:1,2,3,4 等等。
第二個參數(shù)是是否放回queue中,requeue。
BasicReject一次只能拒絕接收一個消息,而BasicNack方法可以支持一次0個或多個消息的拒收,并且也可以設(shè)置是否requeue。
channel.BasicNack(3, true, false);
在第一個參數(shù)DeliveryTag中如果輸入3,則消息DeliveryTag小于等于3的,這個Channel的,都會被拒收
總結(jié)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java Date類常用示例_動力節(jié)點Java學院整理
在JDK1.0中,Date類是唯一的一個代表時間的類,但是由于Date類不便于實現(xiàn)國際化,所以從JDK1.1版本開始,推薦使用Calendar類進行時間和日期處理。這里簡單介紹一下Date類的使用,需要的朋友可以參考下2017-05-05