我正在用setInterval在JS中开发一个工作程序,每隔10秒检查一次是否有新消息。我想知道以下代码是否正确。您认为我会有一些性能问题吗?我在kubernete中将其作为单个pod运行。

const messageHandler = message => {
  sendRequest(message, (message, error, response, body) => {
    if (!error && response.statusCode == 200) {
      message.ack();
    }
  });
};

subscription.on(`message`, messageHandler);

const timeout = 10;
setInterval(() => {
  subscription.removeListener('message', messageHandler);
  subscription.on(`message`, messageHandler);
}, timeout * 1000);

最佳答案

以下是两种更好的方法,而不是每10秒删除和注册一次messageHandler侦听器:


对于进入的消息,请使用一个运行时间较长的消息侦听器,直到从创建侦听器开始到“ x”时间为止。
对于传入消息,请使用长时间运行的消息侦听器,并且仅在自收到最后一条消息以来已经过了“ x”倍的时间后才关闭订户。


在极少数情况下,消息会延迟,订阅者可能会在收到所有已发布的消息之前关闭。但是,如果您将超时设置为大量(以分钟为单位),则将不太可能。

有关创建订户客户端的示例,请参见client library。您可以将超时修改为更大的数字。客户端库使用StreamingPull来维护双向开放流,并在消息变得可用时接收消息,以实现最大吞吐量和低延迟。

09-18 16:39