Skip to Content
Go Realm v1 is released 🎉
RabbitMQDay 1: RabbitMQ Basics

Day 1

RabbitMQ Basics: Broker, Producer, Consumer, Queue, Exchange

āĻĒā§āϰāĻĨāĻŽ āĻĻāĻŋāύ⧇ āϞāĻ•ā§āĻˇā§āϝ āĻšāϞ⧋ RabbitMQ-āĻāϰ core building block āϗ⧁āϞ⧋āϕ⧇ āĻšā§‹āϖ⧇ āĻĻ⧇āĻ–āĻž, flow āĻšāĻŋāϏ⧇āĻŦ⧇ āĻŦā§‹āĻāĻž, āĻāĻŦāĻ‚ āϕ⧋āύ āĻ…āĻ‚āĻļ āϕ⧋āύ āĻ•āĻžāϜ āĻ•āϰ⧇ āϤāĻž āĻĒāϰāĻŋāĻˇā§āĻ•āĻžāϰ āĻ•āϰāĻžāĨ¤

āφāϜāϕ⧇āϰ āϞāĻ•ā§āĻˇā§āϝ

  1. Broker āϕ⧀ āĻāĻŦāĻ‚ āϕ⧇āύ āĻĻāϰāĻ•āĻžāϰ āĻŦā§‹āĻāĻž
  2. Producer, queue, exchange, consumer-āĻāϰ āĻ­ā§‚āĻŽāĻŋāĻ•āĻž āφāϞāĻžāĻĻāĻž āĻ•āϰāĻž
  3. Message flow āĻŽā§āĻ–āĻ¸ā§āĻĨ āύāĻž āĻ•āϰ⧇ mentally simulate āĻ•āϰāϤ⧇ āĻĒāĻžāϰāĻž

RabbitMQ Core Architecture

Core Terms

āϟāĻžāĻ°ā§āĻŽāϏāĻšāϜ āĻŦā§āϝāĻžāĻ–ā§āϝāĻžāĻŽāύ⧇ āϰāĻžāĻ–āĻžāϰ āωāĻĒāĻžā§Ÿ
BrokerRabbitMQ server āϝāĻž message manage āĻ•āĻ°ā§‡â€œpost office”
Producermessage publish āĻ•āϰ⧇sender
Exchangemessage āϕ⧋āύ queue-āϤ⧇ āϝāĻžāĻŦ⧇ āϤāĻž decide āĻ•āϰ⧇traffic police
Queuemessage āϧāϰ⧇ āϰāĻžāϖ⧇inbox
Consumermessage āύāĻŋā§Ÿā§‡ process āĻ•āϰ⧇worker
Bindingexchange āφāϰ queue-āĻāϰ relationrouting rule
āĻāĻ•āϟāĻŋ message-āĻāϰ āĻ­ā§āϰāĻŽāĻŖ

āĻāχ flow āĻ āĻŋāĻ•āĻŽāϤ⧋ āύāĻž āĻŦ⧁āĻāϞ⧇ āĻĒāϰ⧇ ack, retry, exchange type āϏāĻŦāĻ•āĻŋāϛ⧁ āĻāϞ⧋āĻŽā§‡āϞ⧋ āϞāĻžāĻ—āĻŦ⧇āĨ¤

Producer

Go service āĻāĻ•āϟāĻŋ event āϤ⧈āϰāĻŋ āĻ•āϰ⧇ RabbitMQ-āϤ⧇ publish āĻ•āϰ⧇āĨ¤ āĻāϟāĻŋ queue-āϤ⧇ direct āύāĻž āĻ—āĻŋā§Ÿā§‡ āϏāĻžāϧāĻžāϰāĻŖāϤ exchange-āĻ āϝāĻžā§ŸāĨ¤

package main import ( "log" amqp "github.com/rabbitmq/amqp091-go" ) func main() { conn, err := amqp.Dial("amqp://guest:guest@localhost:5672/") if err != nil { log.Fatal(err) } defer conn.Close() ch, err := conn.Channel() if err != nil { log.Fatal(err) } defer ch.Close() err = ch.Publish( "orders.direct", "order.created", false, false, amqp.Publishing{ ContentType: "application/json", Body: []byte(`{"order_id":101}`), }, ) if err != nil { log.Fatal(err) } }
Common misconception

Checkpoint

āĻ•āĻžāωāϕ⧇ ā§Šā§Ļ āϏ⧇āϕ⧇āĻ¨ā§āĻĄā§‡ explain āĻ•āϰ⧋: exchange, queue, consumer āφāϞāĻžāĻĻāĻž āϜāĻŋāύāĻŋāϏ āϕ⧇āύ?

  • Exchange route āĻ•āϰ⧇
  • Queue store āĻ•āϰ⧇
  • Consumer process āĻ•āϰ⧇