为RabbitMq检查notifyClose的几个goroutines;如果连接断开,我该如何关闭所有 goroutines?

问题描述 投票:0回答:0

我有这个函数,当连接和通道初始化时,它会在循环中调用。因此,如果一个连接出现故障,我该如何终止所有 go 通道?

func (c Connects) connectingBalancing(
    conn connect,
    channel *amqp.Channel,
    consumer Consumer,
) {
    type chanErr chan *amqp.Error
    var notifyConnClose chanErr

    if conn.err != nil {
        notifyConnClose = conn.err
    } else {
        notifyConnClose = conn.conn.NotifyClose(make(chanErr))
    }

    notifyChanClose := channel.NotifyClose(make(chanErr))

    for notifyConnClose != nil || notifyChanClose != nil {
        select {
        case err, ok := <-notifyConnClose:
            if !ok {
                notifyConnClose = nil
            } else {
                fmt.Println("connection closed, error", err)
            }
        case err, ok := <-notifyChanClose:
            if !ok {
                notifyChanClose = nil
            } else {
                fmt.Println("connection closed, error", err)
                channelStatus = false

                time.Sleep(time.Second * 1)

                newCn, err := conn.conn.Channel()
                if err != nil {
                    log.Println(err)
                }

                if err := c.createChannel(newCn, consumer); err != nil {
                    log.Println(err)
                }

                channel = newCn
                notifyChanClose = channel.NotifyClose(make(chanErr))
            }
        }
    }
}

我有过做

signal.Notify()
之类的事情的想法,但我不知道该怎么做。

multithreading go rabbitmq connection notify
© www.soinside.com 2019 - 2024. All rights reserved.