Могу ли я предотвратить закрытие amqp.Channel при ошибках - PullRequest
1 голос
/ 08 ноября 2019

Я пытаюсь создать несколько потребителей очереди amqp на одном канале в Go.

Проблема, с которой я сталкиваюсь, заключается в том, что если создать одного из 3 потребителей не удается, и это первый потребитель, которого я пытаюсьсоздать, канал закрыт.

Есть ли способ предотвратить это или мне нужно заново создать канал?

Пример

Предполагается, что клиент очереди-a "не существует, это приведет к ошибке при создании потребителя очереди для" client-b ", так как канал был закрыт в этот момент. Ошибка будет Exception (504) Reason: "channel/connection is not open"

package main

import (
    "github.com/streadway/amqp"
    "log"
)

func check(err error) {
    if err != nil {
        panic(err)
    }
}

func TestChannelProblems() {
    // Setup AMQP stuff
    connection, err := amqp.Dial("amqp://guest:guest@localhost:5672/")
    check(err)
    log.Println("Queue connection ok")

    channel, err := connection.Channel()
    check(err)
    log.Println("Queue channel ok")

    queuesToConnectTo := []string{"client-a", "client-b"}

    for i, _ := range queuesToConnectTo {
        queueName := queuesToConnectTo[i]

        _, err := channel.Consume(queueName, "", false, false, false, false, nil)
        if err != nil {
            log.Printf("Connecting to queue %v failed: %v", queueName, err.Error())
        }

        // ... Here would be the logic to use the return value of channel.Consume
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...