กลไกการเก็บรักษาของ 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),
			})