Как отложить повторную доставку сообщения?

Я использую асинхронную тягу Cloud Pub/Sub

На данный момент, когда я вызываю метод message.nack(), он немедленно повторно доставляет это сообщение.

subscription.on('message', (message) => {
  message.nack();
})

Как отсрочить повторную доставку?

Например, я получил сообщение с publishTime: '2019-05-28T10:24:31.055Z'

Я хочу, чтобы это сообщение было повторно доставлено через 20 секунд (вычислено) после последней доставки.

Возможный дубликат Почему сообщение не доставляется повторно?

Kamal Aboul-Hosn 30.05.2019 13:10
Создание приборной панели для анализа данных на GCP - часть I
Создание приборной панели для анализа данных на GCP - часть I
Недавно я столкнулся с интересной бизнес-задачей - визуализацией сбоев в цепочке поставок лекарств, которую могут просматривать врачи и...
0
1
959
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

В настоящее время в Cloud Pub/Sub нет способа отложить повторную доставку сообщения. Когда сообщение блокируется, оно немедленно становится кандидатом на повторную доставку тому же подписчику или другому абоненту.

Как насчет await sleep(duration); message.nack();? Дайте процессу приложения заснуть на некоторое время, а затем вызовите message.nack()

slideshowp2 06.06.2019 08:43

Хотя это может привести к задержке сообщения, это означает, что сообщение по-прежнему будет учитываться в ограничениях управления потоком. Следовательно, если в этом состоянии находится достаточное количество сообщений, возможно, что никакие новые сообщения не смогут быть обработаны до тех пор, пока ожидающие не будут удалены.

Kamal Aboul-Hosn 06.06.2019 13:11

Теперь вы можете настроить политику повторных попыток в своей подписке Cloud Pub/Sub. Политика повторных попыток позволяет пользователям иметь экспоненциальную отсрочку для каждого сообщения в случае сбоев.

Дополнительную информацию можно найти здесь.

Другие вопросы по теме