我正在用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来维护双向开放流,并在消息变得可用时接收消息,以实现最大吞吐量和低延迟。