มีวิธีการตั้งค่าเวลาหมดอายุของข้อความ (TTL) สำหรับ RabbitMQ อยู่ 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),
})