Как перестать потреблять через некоторое время без сообщений - PullRequest
0 голосов
/ 01 октября 2019

Я пытаюсь закрыть соединение после того, как очередь не была активной в течение 5 минут. У меня есть:

  ch.consume(receivingQueue, async function (msg) {
    if (msg !== null) {
      console.log(msg.content.toString()));
    }
  });

Я читал о Channel.cancel () , но я просто не совсем уверен, где вставить это в поток, поскольку процесс просто сидит и ждетдля нового сообщения, и я не уверен, где взять consumerTag, поскольку его нет в переменной msg.

1 Ответ

0 голосов
/ 01 октября 2019

Я не проверял это, но логика заключается в следующем. setTimeout устанавливается для закрытия соединения через 5 минут для каждого сообщения. Если приходит новое сообщение, старый таймер очищается новым сообщением, и новый таймер воссоздается. в противном случае соединение закрывается через 5 минут

 const closeConnection = function () {
       ch.close()
 }
 let timer = setTimeout(()=>{}, 0); //initial timer for cleartimeout Maybe refactor this?  

 ch.consume(receivingQueue, async function (msg) {
  clearTimeout(timer);
  timer = setTimeout(closeConnection, 300000)
  if (msg !== null) {
   console.log(msg.content.toString()));
  }
 });
...