Skip to Content
Go Realm v1 is released 🎉
RabbitMQDay 5: Durability and Persistence

Day 5

Durable Queue vs Persistent Message

āφāϜāϕ⧇ āφāĻŽāϰāĻž restart survival matrix āĻŦ⧁āĻāĻŦāĨ¤ Queue durable āĻšāϞ⧇āχ message āĻŦ⧇āρāĻšā§‡ āĻĨāĻžāĻ•āĻŦ⧇, āĻāĻŽāύ āĻ­āĻžāĻŦāĻž beginner trapāĨ¤

āĻĻ⧁āχāϟāĻŋ āφāϞāĻžāĻĻāĻž āϜāĻŋāύāĻŋāϏ

Conceptāϕ⧀ survive āĻ•āϰ⧇Go code knob
Durable queuequeue definition broker restart-āĻāϰ āĻĒāϰ⧇ āĻĨāĻžāϕ⧇QueueDeclare(... durable=true ...)
Persistent messagemessage disk-āĻ persist āĻšāĻ“ā§ŸāĻžāϰ āĻšā§‡āĻˇā§āϟāĻž āĻ•āϰ⧇DeliveryMode: amqp.Persistent

Survival Matrix

Queue durable?Message persistent?Restart-āĻāϰ āĻĒāϰ⧇ āϕ⧀ āφāĻļāĻž āĻ•āϰāĻž āϝāĻžā§Ÿ
NoNoqueue-āĻ“ āĻšāĻžāϰāĻžāϤ⧇ āĻĒāĻžāϰ⧇, message-āĻ“ āĻšāĻžāϰāĻžāϤ⧇ āĻĒāĻžāϰ⧇
YesNoqueue āĻĨāĻžāĻ•āĻŦ⧇, in-flight/non-persistent message āĻšāĻžāϰāĻžāϤ⧇ āĻĒāĻžāϰ⧇
NoYesqueue āύāĻž āĻĨāĻžāĻ•āϞ⧇ benefit āύ⧇āχ
YesYessafest baseline
q, err := ch.QueueDeclare("billing.queue", true, false, false, false, nil) if err != nil { log.Fatal(err) } err = ch.Publish("", q.Name, false, false, amqp.Publishing{ DeliveryMode: amqp.Persistent, ContentType: "application/json", Body: []byte(`{"invoice_id":9001}`), }) if err != nil { log.Fatal(err) }
Production nuance

Checkpoint

āĻāĻ•āϟāĻŋ sentence-āĻ explain āĻ•āϰ⧋: durable queue āĻŽāĻžāύ⧇ message durable āύāĻžāĨ¤

  • Queue metadata āĻŦāĻžāρāĻšā§‡
  • Payload āĻŦāĻžāρāϚāĻžāϰ āϜāĻ¨ā§āϝ message persistence āĻĻāϰāĻ•āĻžāϰ
  • End-to-end reliability āφāϰāĻ“ factors-āĻāϰ āĻ“āĻĒāϰ āύāĻŋāĻ°ā§āĻ­āϰ āĻ•āϰ⧇