Ответ
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)
}