go - 我可以防止 amqp.Channel 因错误而关闭吗?

我尝试在 Go 中的单个 channel 上创建多个 AMQP 队列消费者。

我面临的问题是,当创建多个消费者时,如果第一个消费者失败, channel 会立即关闭,从而阻止进一步的操作。

有没有办法避免这种情况,还是我必须重新创建 channel ?

例子

假设队列“client-a”不存在,这将导致在为“client-b”创建队列消费者时出错,因为此时 channel 已关闭。错误将是 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
    }
}

最佳答案

长话短说:在协议(protocol)异常时关闭 channel 是 AMQP(或至少 RabbitMQ)中的正常行为,必须由应用程序处理。

来源:https://www.rabbitmq.com/channels.html#error-handling

https://stackoverflow.com/questions/58771445/

相关文章:

python-3.x - matplotlib 错误 : No module named matpl

reactjs - 在 React 中如何使用 useState 钩子(Hook)更新状态

reactjs - React 中的动态标题内容

python - 如何在 Python 中移动文件?

c# - 显示哪个分数与哪个标签相关的 ML.Net 错误

c# - 如何检测进程是否移动了鼠标光标而不是用户?

python - Tensorflow:在 pb 模型中使用 tensorflow.contrib.

javascript - 如何仅禁用 chrome 中的 "debugger"关键字,该关键字由循环

c# - 检测浏览器中是否弹出打开文件对话框

django - 触发 onactivatefile 时向预览图像添加图标/div (Filepon