SEE UPDATERabbitMQ DeliveryTag всегда 1
Я RabbitMQ установлен на моей локальной машине и может стоять в очереди сообщений без каких-либо проблем.
Я использую одобренную RabbitMQ библиотеку .NET Client.
После удаления сообщения и успешного его обработки наш план состоял в том, чтобы подтвердить сообщение с помощью BasicAck и передать DeliveryTag. Это, похоже, не работает, поскольку все сообщения возвращаются в состояние готовности.
Посмотрите на значение DeliveryTag после BasicGet, он ВСЕГДА 1. Я уверен, что это неправильно, так как я могу передать этот тег на BasicAck и ожидать, что сообщение будет уникально идентифицировано.
Что я делаю неправильно? DeliveryTag должна быть уникальной ссылкой, а не «1» да?
UPDATE
Я воссоздает CHANNEL каждый раз, так что вызов BasicGet и вызов BasicAck были на разных каналах. После того, как я повторно Канал обменивались сообщениями были успешно перемещены через Ready -> Uacked -> Офф Q.
FWIW DeliveryTag еще 1
Если кто-то хочет сказать мне, что я не должен быть реиспользование каналы, я думаю теперь это ответ. Я знаю о возможных многопоточных проблемах с повторным использованием каналов.
Благодаря
Pat
использовать авто-Ack ли? – pinepain
Фактически, доставка-тег = 1 означает «до и включительно» (см. Http://www.rabbitmq.com/amqp-0-9-1reference.html#basic.ack.delivery-tag), так что в целом вы все еще может распознавать сообщения, но вся ситуация немного странная, может быть, ребята .NET предоставляют более подробную информацию? – pinepain
Когда мы вызываем channel.BasicGet, я передаю false для noAck, поэтому я предполагаю, что это не «использовать auto-ack». Если мы вернемся, DeliveryTag все равно 1, но сообщения останутся в очереди. Глядя на документы, кажется, что multiple = 1 означает «до и в том числе», а не DeliverTag. http://www.rabbitmq.com/amqp-0-9-1-reference.html. Нужно ли мне Dequeue и BadsicAclk на одном канале и соединении? –