RabbitMQ設定TTL生存時間

2021-10-11 14:28:40 字數 1785 閱讀 7179

public

static

void

main

(string[

] args)

throws ioexception, timeoutexception

connection connection = factory.

newconnection()

; channel channel = connection.

createchannel()

; map

arguments =

newhashmap

<

>()

; arguments.

put(

"x-message-ttl"

,10000);

//設定過期時間10秒

channel.

queuedeclare

(queue_name,

false

,false

,false

, arguments)

; channel.

basicpublish(""

, route_key,

true

, null, message.

getbytes()

);system.out.

println

("message delivery ["

+ message +

"]")

;}

通過設定佇列屬性的方式來設定ttl,也就是說佇列中所有的訊息都是有相同的ttl屬性。

也可以通過設定單條訊息的方式設定:

public

static

void

main

(string[

] args)

throws ioexception, timeoutexception

設定佇列屬性:一旦訊息過期,就會從佇列中抹去。

設定訊息屬性:即使訊息過期,也不會馬上從佇列中抹去,因為每條訊息是否過期時在即將投遞到消費者之前判定的。

解析:因為第一種方法裡,佇列中已過期的訊息肯定在佇列頭部,rabbitmq只要定期從隊頭開始掃瞄是否有過期訊息即可,而第二種方法裡,每條訊息的過期時間不同,如果要刪除所有過期訊息,勢必要掃瞄整個佇列,所以不如等到此訊息即將被消費時再判定是否過期,如果過期,再進行刪除。

queue.declare 命令中的x-expires引數控制queue被自動刪除前可以處於未使用狀態的時間

用於表示超期時間的x-expires引數值以微秒為單位,並且服從和x-message-ttl一樣的約束條件,且不能設定為0

map

args =

newhashmap

();args.

put(

"x-expires"

,1800000);

channel.

queuedeclare

("order"

,false

,false

,false

, args)

;

TTL生存時間

ttl 生存時間 ttl是ip協議包中的乙個值,它告訴網路路由器包在網路中的時間是否太長而應被丟棄。有很多原因使包在一定時間內不能被傳遞到目的地。例如,不正確的路由表可能導致包的無限迴圈。乙個解決方法就是在一段時間後丟棄這個包,然後給傳送者乙個報文,由傳送者決定是否要重發。ttl的初值通常是系統預設...

TTL 生存時間 介紹

ttl time to live 生存時間,是ip協議包中的乙個值,它告訴網路路由器包在網路中的時間是否太長而應被丟棄。有很多原因使包在一定時間內不能被傳遞到目的地。例如,不正確的路由表可能導致包的無限迴圈。乙個解決方法就是在一段時間後丟棄這個包,然後給傳送者乙個報文,由傳送者決定是否要重發。ttl...

Hbase命令設定TTL 編碼設定TTL

建立表的時候指定 create t task log 檢視ttl desc t task log 預設 ttl forever 修改ttl 禁用表 disable t task log 設定ttl值,作用於列族cf alter t task log name cf ttl 86400 恢復表 ena...