มีวิธีการตั้งค่าเวลาหมดอายุของข้อความ (TTL) สำหรับ RabbitMQ อยู่ 2 วิธีดังนี้:

  1. ตั้งค่าผ่านคุณสมบัติของคิว ทำให้ข้อความทั้งหมดในคิวมีเวลาหมดอายุเท่ากัน
  2. ตั้งค่าเวลาหมดอายุสำหรับแต่ละข้อความโดยอิงให้แต่ละข้อความมี TTL ต่างกัน หากใช้วิธีทั้งสองร่วมกัน ค่า TTL ของข้อความจะถูกกำหนดเป็นค่าที่น้อยกว่าระหว่างทั้งสอง

เคล็ดลับ: สำหรับวิธีการตั้งค่าคุณสมบัติของคิว ครั้งที่ข้อความหมดอายุ ข้อความจะถูกลบออกจากคิวทันที ในวิธีที่สอง แม้ว่าข้อความจะหมดอายุแล้ว มันก็จะไม่ถูกลบออกจากคิวทันที เพราะการหมดอายุของแต่ละข้อความจะถูกตรวจสอบก่อนการส่งให้กับผู้บริโภค

ด้านล่างเป็นการสาธิตถึงวิธีการตั้งค่านี้โดยใช้ Golang คล้ายกับภาษาโปรแกรมอื่น ๆ

ตั้งค่า TTL ของคิว

ตั้งค่าเวลาหมดอายุของข้อความผ่านคุณสมบัติของคิว (x-message-ttl).

	// คุณสมบัติของคิว
	props := make(map[string]interface{})
	// เวลาหมดอายุของข้อความคือ 60 วินาที
	props["x-message-ttl"] = 60000

	q, err := ch.QueueDeclare(
		"tizi365.ttl.hello", // ชื่อคิว
		true,   // ว่าจะรักษาคิวหรือไม่
		false,
		false,
		false,
		props, // ตั้งค่าคุณสมบัติของคิว
	)

ตั้งค่า TTL ของข้อความ

ตั้งค่าเวลาหมดอายุของข้อความผ่านคุณสมบัติของข้อความ

err = ch.Publish(
		"tizi365",     // ชื่อเอ็กซเชนจ์
		"", // คีย์เร้าทิ้ง
		false,
		false,
		amqp.Publishing{
			Expiration: "30000", // เวลาหมดอายุคือ 30 วินาที
			ContentType: "text/plain",
			Body:        []byte(body),
		})