Расскажи про опыт работы с очередями

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

Ответ

Работал с очередями в Golang, используя RabbitMQ, Kafka и NATS. Основные задачи: асинхронная обработка задач, балансировка нагрузки, event-driven архитектура.

Пример с RabbitMQ:

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("tasks", false, false, false, false, nil)
if err != nil {
    log.Fatal(err)
}

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

Использовал dead-letter queues для обработки ошибок, гарантированную доставку через подтверждения (ack/nack), и шаблоны типа "publish-subscribe". Для Kafka работал с партициями, consumer groups и exactly-once семантикой.