RabbitMQ系列 五 高階特性

2022-02-18 21:13:49 字數 2558 閱讀 2843

一、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:

public

class

producer

});//5 傳送一條訊息

string msg = "hello rabbitmq send confirm message!";

channel.basicpublish(exchangename, routingkey,

true, null

, msg.getbytes());}}

producer return

結果:

---------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, false

);channel.basicconsume(queuename,

false, new myconsumer(channel));

qos:

服務質量保證,在非自動確認情況下,一定數目的訊息沒有確認,不進行消費新的訊息,通過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

class myconsumer extends

defaultconsumer

@override

public

void handledelivery(string consumertag, envelope envelope, amqp.basicproperties properties, byte body) throws

ioexception

}

四、ttl

五、死信佇列

未完待續。。。

RabbitMQ高階特性

所謂訊息的可靠性就是保證訊息生產者傳送訊息後,消費者收到的訊息與傳送的訊息保證一致,同時確保訊息不會丟失.對於這種情況更好的方式就是使用以下兩種方式 1.確認模式 對於確認模式,就是生產者將訊息傳送給交換機時,會返回乙個confirmcallback 配置檔案如下 在配置檔案中需要申明交換機,佇列,...

RabbitMQ高階特性 Confirm確認訊息

在channel上開啟確認模式 channel.confirmselect 在channel上新增監聽 addconfirmlistener,監聽成功和失敗的返回結果,根據具體的結果對訊息進行重新傳送,或記錄日誌等後續處理 package com.qiyexue.confirm import com...

RabbitMQ高階特性 死信佇列

死信佇列,英文縮寫 dlx dead letter exchange 死信交換機 當訊息成為dead message後,可以被重新傳送到另乙個交換機,這個交換機就是dlx。死信交換機和死信佇列和普通的沒有區別,當訊息成為死信後,如果該佇列繫結了死信交換機,則訊息會被死信交換機重新路由到死信佇列 訊息...