Что такое RabbitMQ

«Что такое RabbitMQ» — вопрос из категории Брокеры сообщений, который задают на 24% собеседований Golang Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

RabbitMQ — это распределенная система управления очередью сообщений, реализующая протокол AMQP (Advanced Message Queuing Protocol). Он позволяет приложениям обмениваться сообщениями асинхронно, обеспечивая надежную доставку, маршрутизацию и балансировку нагрузки.

Ключевые особенности:

  • Поддержка очередей, обменников (exchanges) и привязок (bindings).
  • Гарантированная доставка (persistent messages).
  • Поддержка кластеризации и высокой доступности.

Принцип работы:

  • Паблишеры (publishers) отправляют сообщения на exchange’и
  • Exchange’и отправляют сообщения в очереди и в другие exchange’и
  • RabbitMQ отправляет подтверждения паблишерам при получении сообщения
  • Получатели (consumers) поддерживают постоянные TCP-соединения с RabbitMQ и объявляют, какую очередь(-и) они получают
  • RabbitMQ проталкивает (push) сообщения получателям
  • Получатели отправляют подтверждения успеха/ошибки
  • После успешного получения, сообщения удаляются из очередей

Пример на Go (с библиотекой amqp):

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()

q, err := ch.QueueDeclare("hello", false, false, false, false, nil)
if err != nil {
    log.Fatal(err)
}

body := "Hello, RabbitMQ!"
err = ch.Publish("", q.Name, false, false, amqp.Publishing{
    ContentType: "text/plain",
    Body:        []byte(body),
})
if err != nil {
    log.Fatal(err)
}