一、confirm機制
confirm就是訊息確認,當producer傳送訊息,如果broker收到訊息,會回覆乙個應答,我們可以以此來確認訊息是否成功送達,是保證
訊息可靠性投遞的核心保障
producer**如下,只需要修改producer端,而consumer端不需要修改
//結果:4 指定我們的訊息投遞模式: 訊息的確認模式
channel.confirmselect();
//5 傳送一條訊息
string msg = "hello rabbitmq send confirm message!";
channel.basicpublish(exchangename, routingkey,
null
, msg.getbytes());
//6 新增乙個確認監聽
channel.addconfirmlistener(new
confirmlistener()
@override
public
void handleack(long deliverytag, boolean multiple) throws
ioexception
});
-------ack!-----------只要producer能把訊息傳送給broker,就會返回handlerack中,返回到nack的可能很小,例如mq出現異常,queue的容量達到上限
二、return訊息機制
return listener用於處理一些不可路由的訊息
producer:
publicproducer returnclass
producer
});//5 傳送一條訊息
string msg = "hello rabbitmq send confirm message!";
channel.basicpublish(exchangename, routingkey,
true, null
, msg.getbytes());}}
結果:
---------handle return----------replycode: 312replytext: no_route注意:exchange: exchange_topic
routingkey: fdasfdsafsadf4543453
properties: #contentheader
)body: hello rabbitmq send confirm message!
channel.basicpublish引數裡面一定要把mandatory設定為true,才能收到監聽不可達的訊息(建立exchange、routingkey不匹配等問題
,導致不可達),
然後進行後續處理,如果為false,broker自動刪除該訊息,上面例子就是routingkey設定不匹配,consumer的**就不給了
三、訊息端限流
限流一般無法從生產端,只能在消費端處理
在consumer端設定:
channel.basicqos(0, 1, falseqos:);channel.basicconsume(queuename,
false, new myconsumer(channel));
服務質量保證,在非自動確認情況下,一定數目的訊息沒有確認,不進行消費新的訊息,通過producer/consumer設定qos的值
channel.basicqos(prefetchsize, prefetch_count, global);
注意:
prefetchsize和global,rabbitmq沒有實現,預設0表示對單條message的大小沒有限制、false(非channel級別,consumer級別)
channel.basicconsume中自動簽收一定要設定成false
prefetch_count表示一次給幾條進行消費,直到返回ack,才能繼續給prefetch_count條message
在myconsumer中手動簽收
public四、ttlclass myconsumer extends
defaultconsumer
@override
public
void handledelivery(string consumertag, envelope envelope, amqp.basicproperties properties, byte body) throws
ioexception
}
五、死信佇列
未完待續。。。
RabbitMQ高階特性
所謂訊息的可靠性就是保證訊息生產者傳送訊息後,消費者收到的訊息與傳送的訊息保證一致,同時確保訊息不會丟失.對於這種情況更好的方式就是使用以下兩種方式 1.確認模式 對於確認模式,就是生產者將訊息傳送給交換機時,會返回乙個confirmcallback 配置檔案如下 在配置檔案中需要申明交換機,佇列,...
RabbitMQ高階特性 Confirm確認訊息
在channel上開啟確認模式 channel.confirmselect 在channel上新增監聽 addconfirmlistener,監聽成功和失敗的返回結果,根據具體的結果對訊息進行重新傳送,或記錄日誌等後續處理 package com.qiyexue.confirm import com...
RabbitMQ高階特性 死信佇列
死信佇列,英文縮寫 dlx dead letter exchange 死信交換機 當訊息成為dead message後,可以被重新傳送到另乙個交換機,這個交換機就是dlx。死信交換機和死信佇列和普通的沒有區別,當訊息成為死信後,如果該佇列繫結了死信交換機,則訊息會被死信交換機重新路由到死信佇列 訊息...