Я пытаюсь написать RabbitMQ Consumer в Go. Предположим, что вы должны взять 5 объектов за один раз из очереди и обработать их. Более того, следует признать, что если успешно обработано, еще раз отправить в очередь на мертвую букву в 5 раз, а затем выбросить, он должен работать бесконечно и обрабатывать событие отмены потребителя. У меня есть несколько вопросов:RabbitMQ потребитель в Go
- есть ли понятие
BasicConsumer
противEventingBasicConsumer
в RabbitMQ ход Reference? - Что такое
Model
в RabbitMQ и есть ли он в RabbitMq-go? - Как отправить объекты, когда не в очередь недоставленных и снова повторно их в очередь после того, как
ttl
- Какое значение
consumerTag
аргумента в функцииch.Consume
в коде ниже - Если мы используем
channel.Get()
илиchannel.Consume()
для этого сценария?
Каковы изменения, которые мне необходимо внести в приведенном ниже коде, чтобы соответствовать вышеуказанному требованию. Я спрашиваю об этом, потому что я не мог найти приличную документацию о RabbitMq-Go.
func main() {
consumer()
}
func consumer() {
objConsumerConn := &rabbitMQConn{queueName: "EventCaptureData", conn: nil}
initializeConn(&objConsumerConn.conn)
ch, err := objConsumerConn.conn.Channel()
failOnError(err, "Failed to open a channel")
defer ch.Close()
msgs, err := ch.Consume(
objConsumerConn.queueName, // queue
"demo1", // consumerTag
false, // auto-ack
false, // exclusive
false, // no-local
false, // no-wait
nil, // args
)
failOnError(err, "Failed to register a consumer")
forever := make(chan bool)
go func() {
for d := range msgs {
k := new(EventCaptureData)
b := bytes.Buffer{}
b.Write(d.Body)
dec := gob.NewDecoder(&b)
err := dec.Decode(&k)
d.Ack(true)
if err != nil { fmt.Println("failed to fetch the data from consumer", err); }
fmt.Println(k)
}
}()
log.Printf(" Waiting for Messages to process. To exit press CTRL+C ")
<-forever
}
Edited вопрос:
Я задержал обработку сообщений, как предложено в ссылках link1link2. Но проблема в том, что сообщения возвращаются в исходную очередь из очереди с мертвой буквой даже после ttl. Я использую RabbitMQ 3.0.0
. Может ли кто-нибудь указать, в чем проблема?
Попробуйте AMQP пакет для взаимодействия с кроликом, и он имеет очень приличную документацию https://godoc.org/github.com/streadway/amqp – PerroVerd
@PerroVerd Вот что я использую. – Naresh