正确的Go/RabbitMQ路径至;“流行音乐”;队列中有一条消息吗?

正确的Go/RabbitMQ路径至;“流行音乐”;队列中有一条消息吗?,go,kubernetes,rabbitmq,amqp,Go,Kubernetes,Rabbitmq,Amqp,我的第一个问题是设计问题。这是我第一次编写使用队列的服务,我也是新手。我正在尝试确定是否应该以这样一种方式来编写我的worker:它只是从队列中弹出一条消息,对其进行处理,然后消息就消失了。对于Kubernetes这样的事情来说,这似乎相当微不足道 或者我应该让一个长寿的员工不断地等待新的消息,但如果消息死亡(由于错误或事故)就会重新启动 我问这个问题的原因是,为了实现前者,它感觉有点“被黑客攻击”,因为我必须使用streadway/AMQP中的common go AMQP库编写以下内容(阅读评

我的第一个问题是设计问题。这是我第一次编写使用队列的服务,我也是新手。我正在尝试确定是否应该以这样一种方式来编写我的worker:它只是从队列中弹出一条消息,对其进行处理,然后消息就消失了。对于Kubernetes这样的事情来说,这似乎相当微不足道

或者我应该让一个长寿的员工不断地等待新的消息,但如果消息死亡(由于错误或事故)就会重新启动

我问这个问题的原因是,为了实现前者,它感觉有点“被黑客攻击”,因为我必须使用streadway/AMQP中的common go AMQP库编写以下内容(阅读评论):

//Pop将从AMQP队列中提取消息
func(v*Queue)Pop()(数据[]字节,错误){
msgs,err:=v.Channel.Consume(
v、 QueueName,//队列
v、 conmerid,//消费者
true,//自动确认
false,//独占
false,//没有本地
false,//没有等待
nil,//args
)
如果错误!=零{
返回零,错误
}
//我们必须使用..范围,因为消费返回

// "在Kubernetes land中,只需从
中提取一个对象,一个长期的过程肯定会更好:pod的启动时间可能非常短,如果该过程太快或太频繁地退出,您将进入可怕的
CrashLoopBackOff
状态,可能需要几分钟才能再次安排。频道运营商是cove太长了,读不下去了。这个家伙在Github上差不多做了同样的事情,但是处理了一批消息。但是我对我的深度和渠道和日常程序都不太了解。你们谁愿意做一个快速TL,DR,对于这个问题和设计的背景下,发生了什么?
// Pop will extract a message from the AMQP queue
func (v *Queue) Pop() (data []byte, err error) {
    msgs, err := v.Channel.Consume(
        v.QueueName, // queue
        v.ConsmerID, // consumer
        true,        // auto-ack
        false,       // exclusive
        false,       // no-local
        false,       // no-wait
        nil,         // args
    )
    if err != nil {
        return nil, err
    }

    // We have to use for .. range because Consume returns
    // "<-chan Delivery" but if we only want ONE message popped off
    // we return on the first one
    for data := range msgs {
        return data.Body, nil
    }

    // We should never get this far...
    return nil, errors.New("Something went wrong")
}
data := <- msgs
return data.Body, nil
err := v.Channel.Qos(1, 0, false)