āĻāĻāĻā§āϰ āϞāĻā§āώā§āϝ
- Broker āĻā§ āĻāĻŦāĻ āĻā§āύ āĻĻāϰāĻāĻžāϰ āĻŦā§āĻāĻž
- Producer, queue, exchange, consumer-āĻāϰ āĻā§āĻŽāĻŋāĻāĻž āĻāϞāĻžāĻĻāĻž āĻāϰāĻž
- Message flow āĻŽā§āĻāϏā§āĻĨ āύāĻž āĻāϰ⧠mentally simulate āĻāϰāϤ⧠āĻĒāĻžāϰāĻž
Core Terms
| āĻāĻžāϰā§āĻŽ | āϏāĻšāĻ āĻŦā§āϝāĻžāĻā§āϝāĻž | āĻŽāύ⧠āϰāĻžāĻāĻžāϰ āĻāĻĒāĻžā§ |
|---|---|---|
| Broker | RabbitMQ server āϝāĻž message manage āĻāϰ⧠| âpost officeâ |
| Producer | message publish āĻāϰ⧠| sender |
| Exchange | message āĻā§āύ queue-āϤ⧠āϝāĻžāĻŦā§ āϤāĻž decide āĻāϰ⧠| traffic police |
| Queue | message āϧāϰ⧠āϰāĻžāĻā§ | inbox |
| Consumer | message āύāĻŋā§ā§ process āĻāϰ⧠| worker |
| Binding | exchange āĻāϰ queue-āĻāϰ relation | routing 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 āĻāϰā§