1. 程式人生 > >RabbitMQ Dead Letter Exchange

RabbitMQ Dead Letter Exchange

簡稱DLX

如果一個queue設定了DLX,那麼在rabbitmq的管理控制檯中的這個queue上就會多個標誌,如圖:

邊上還有DLK,是dead-letter-routing-key的縮寫。

佇列中的訊息,有可能是'dead-lettered',字面意思就是'死信',當下面的這些情況發生時,信就被認為是‘死信’,這些死信會被送至另一個exchange,這個exchange就是DLX:

  1. The message is rejected (basic.reject or basic.nack) with requeue=false;
  2. The TTL for the message expires;
  3. The queue length limit is exceeded.

DLX預設是沒有的,有兩種方法設定,這裡使用程式碼在宣告佇列的時候設定:

Queue.declare(
	channel, "myqueue",
	durable: true,
	arguments: [
		# 這裡空字串表示用default exchange,可以設定任意的exchange
		{"x-dead-letter-exchange", :longstr, ""},
		# 如果這個不設定, 預設使用這個訊息的routing key
		{"x-dead-letter-routing-key", :longstr, "my.error.message"} 
	]
)