Я использую асинхронную тягу Cloud Pub/Sub
На данный момент, когда я вызываю метод message.nack()
, он немедленно повторно доставляет это сообщение.
subscription.on('message', (message) => {
message.nack();
})
Как отсрочить повторную доставку?
Например, я получил сообщение с publishTime: '2019-05-28T10:24:31.055Z'
Я хочу, чтобы это сообщение было повторно доставлено через 20 секунд (вычислено) после последней доставки.
В настоящее время в Cloud Pub/Sub нет способа отложить повторную доставку сообщения. Когда сообщение блокируется, оно немедленно становится кандидатом на повторную доставку тому же подписчику или другому абоненту.
Как насчет await sleep(duration); message.nack();
? Дайте процессу приложения заснуть на некоторое время, а затем вызовите message.nack()
Хотя это может привести к задержке сообщения, это означает, что сообщение по-прежнему будет учитываться в ограничениях управления потоком. Следовательно, если в этом состоянии находится достаточное количество сообщений, возможно, что никакие новые сообщения не смогут быть обработаны до тех пор, пока ожидающие не будут удалены.
Теперь вы можете настроить политику повторных попыток в своей подписке Cloud Pub/Sub. Политика повторных попыток позволяет пользователям иметь экспоненциальную отсрочку для каждого сообщения в случае сбоев.
Дополнительную информацию можно найти здесь.
Возможный дубликат Почему сообщение не доставляется повторно?