Есть ли возможность медленно обрабатывать асинхронные запросы RabbitMQ, чтобы вызвать процесс запроса как дублирование- исследование

#c# #rabbitmq #rabbitmq-exchange

#c# #rabbitmq #rabbitmq-обмен

Вопрос:

Я публиковал асинхронный запрос 2000 в конвейер RabbitMQ, который будет обрабатывать каждый запрос асинхронно. У меня возникла некоторая проблема при обработке запроса.
1. Некоторый запрос обрабатывается несколько раз. Я нашел решение как [https://www.rabbitmq.com/consumers.html#message-properties ] [1] В случае сбоя сети (или сбоя узла) сообщения могут быть доставлены повторно, и потребители должны быть готовы обрабатывать доставки, которые они видели в прошлом.

Мой вопрос в том, есть ли у нас какие-либо случаи при медленной обработке асинхронного запроса RabbitMQ? пример —

Обработка запроса-1 начнется в 2020-08-12 08:06:05.000. Запрос 1 заканчивается в 2020-08-12 08:06:19.000, обрабатывая тот же запрос 1 в 2020-08-12 08:06: 11.000, и который заканчивается в 2020-08-12 08:06:18.000

Если с RabbitMQ произойдет какая-либо задержка или тайм-аут, это приведет к повторной обработке запроса? перед завершением первого запроса RabbitMQ обработает его снова. Есть ли у нас такой шанс? Пожалуйста, помогите.

Комментарии:

1. Я не уверен, что вы спрашиваете о медленных запросах в частности, но в целом использования ручных подтверждений должно быть достаточно, чтобы избежать фактической обработки сообщений дважды.

2. @IMSoP есть ли возможность обработать / использовать один и тот же запрос, опубликованный в конвейере rabbitmq дважды?

3. @IMSoP медлительность, о которой я упоминал здесь, потребляет / обрабатывает опубликованное сообщение в конвейере, занимая некоторое дополнительное время, чем обычно. Итак, я предполагаю, что из-за этой разницы во времени для завершения обработки одного запроса (опубликованного сообщения) RabbitMQ снова начнет потреблять / обрабатывать тот же запрос.

4. у @IMSoP есть обходной путь, позволяющий избежать дублирования обработки путем проверки состояния последнего обработанного / потребленного события (как вы указали в ссылке). но в нашем случае опубликованное сообщение потребляется / обрабатывается через некоторое время, чем ожидалось. он изменит статус на обработанный только после завершения обработки / потребления из конвейера. RabbitMQ снова обрабатывает тот же запрос (я не знаю причины), при обработке / использовании того же запроса он проверяет статус события и ожидает его. В результате он обеспечивает дублирование запроса.