กลไกการเก็บรักษาของ RabbitMQ ประกอบด้วยการเก็บรักษาคิว (queue persistence), การเก็บรักษาข้อความ (message persistence), และการเก็บรักษาแลกเชน (exchange persistence) ไม่ว่าข้อความจะถูกเก็บรักษาหรือไม่ก็สามารถเขียนลงดิสก์ได้
ข้อความที่ถาวรถูกเขียนลงดิสก์และหน่วยความจำ (เพื่อเพิ่มความเร็วในการอ่าน) ในขณะที่ข้อความที่ไม่ถาวรจะถูกเขียนลงดิสก์เมื่อหน่วยความจำไม่เพียงพอ (และจะสูญหายหลังจาก RabbitMQ เริ่มทำงานใหม่)
การเก็บรักษาคิว RabbitMQ
เมื่อประกาศคิว คุณสามารถตั้งค่าว่าคิวต้องการถูกเก็บรักษาหรือไม่ ใน Golang คิวถูกประกาศดังนี้:
q, err := ch.QueueDeclare(
"hello", // ชื่อคิว
true, // ว่าคิวควรถูกเก็บรักษาหรือไม่
false,
false,
false,
nil,
)
เกร็ด: คล้ายกับภาษาโปรแกรมอื่น ๆ คุณสามารถตั้งค่าคิวเมื่อประกาศ
การเก็บรักษาแลกเชน RabbitMQ
เมื่อประกาศแลกเชน คุณสามารถตั้งค่าว่าจะต้องเก็บรักษาหรือไม่โดยใช้คุณสมบัติ ใน Golang มันถูกประกาศดังนี้:
err = ch.ExchangeDeclare(
"tizi365", // ชื่อแลกเชน
"fanout", // ประเภทแลกเชน
true, // ว่ามันควรถูกเก็บรักษาหรือไม่
false,
false,
false,
nil,
)
เกร็ด: คล้ายกับภาษาโปรแกรมอื่น ๆ คือสามารถตั้งค่าการเก็บรักษาเมื่อประกาศแลกเชน
การเก็บรักษาข้อความ RabbitMQ
เมื่อเผยแพร่ข้อความ คุณสามารถตั้งค่าว่าข้อความจำเป็นต้องเก็บรักษาหรือไม่ผ่านคุณสมบัติข้อความ
เกร็ด: การเก็บรักษาคิวไม่ได้หมายความว่าข้อความจะถูกเก็บรักษาโดยอัตโนมัติ
ใน Golang ข้อความถูกเผยแพร่ดังนี้:
err = ch.Publish(
"tizi365", // แลกเชน
"", // คีย์การเชื่อมต่อ
false,
false,
amqp.Publishing{
DeliveryMode:2, // โหมดการส่งข้อความ 1 สำหรับไม่ถาวร 2 สำหรับถาวร
ContentType: "text/plain",
Body: []byte(body),
})