gpt4 book ai didi

go - 消费者失败时关闭 amqp.Channel 没有响应

转载 作者:行者123 更新时间:2023-12-01 21:12:24 25 4
gpt4 key购买 nike

我用 https://github.com/NeowayLabs/wabbit/
当 amqp.Channel 在错误的尝试 channel.Consume 后关闭时,我们有一个未监听的 chan 并且函数没有响应。
我的代码:

package main

import (
"fmt"
"github.com/NeowayLabs/wabbit"
"github.com/NeowayLabs/wabbit/amqptest"
"github.com/NeowayLabs/wabbit/amqptest/server"
)

func someFunc(amqpURL string) error {
conn, err := amqptest.Dial(amqpURL)
defer conn.Close()

channel, err := conn.Channel()
defer channel.Close()

consumer, err := channel.Consume(
"queue",
"consumer",
wabbit.Option{},
)
if err != nil {
return err // err = "Unknown queue 'queue'", but we never response it
}

fmt.Println(<-consumer)

return nil
}

func main() {
amqpURL := "127.0.0.1:32773"
fakeServer := server.NewServer(amqpURL)
err := fakeServer.Start()
defer fakeServer.Stop()

err = someFunc(amqpURL)
if err != nil {
panic(err)
}
fmt.Println("Happy end")
}
someFunc 从不响应错误,但我想处理消费者错误。

最佳答案

someFunc永远不会响应错误,因为它在 defer 中挂断。代码。
someFunc到达return err行,然后它会尝试运行 defer您在函数开头设置的语句。它尝试的第一个是defer channel.Close() .
问题似乎出在 wabbit 库中的这个 block 上:https://github.com/NeowayLabs/wabbit/blob/d8bc549279ecd80204a8a83a868a14fdd81d1a1b/amqptest/server/channel.go#L315-L317
我想,虽然我不确定,写信给 consumer.done channel 是阻塞操作,因为 channel 没有缓冲,也没有接收器。见:https://gobyexample.com/non-blocking-channel-operations了解更多信息。
我在本地运行时注释掉了该代码块,发现其余代码按照您的预期运行,最终导致 panic: Unknown queue 'queue'

关于go - 消费者失败时关闭 amqp.Channel 没有响应,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63636165/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com