Писал ли взаимодействие с очередями

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

Ответ

Да, работал с очередями, в основном с RabbitMQ и Kafka. В RabbitMQ использовал библиотеку github.com/streadway/amqp для публикации и потребления сообщений. В Kafka — github.com/segmentio/kafka-go или github.com/confluentinc/confluent-kafka-go.

Пример с 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("test", 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("Hello, RabbitMQ!"),
})
if err != nil {
    log.Fatal(err)
}

Также работал с dead-letter очередями, подтверждением сообщений (ack/nack) и балансировкой нагрузки между потребителями.