我正在运行项目,该项目将消息发布到PubSub主题并触发后台云功能。
我读到,在大量的消息中,它执行得很好,但是对于每秒几百条甚至几十条消息这样的较小数量的消息,Pub/Sub可能会产生很高的延迟。
发布单个消息的代码示例:
const {PubSub} = require('@google-cloud/pubsub');
const pubSubClient = new PubSub();
async function publishMessage() {
const topicName = 'my-topic';
const dataBuffer = Buffer.from(data);
const messageId = await pubSubClient.topic(topicName).publish(dataBuffer);
console.log(`Message ${messageId} published.`);
}
publishMessage().catch(console.error);由PubSub触发的代码示例函数:
exports.subscribe = async (message) => {
const name = message.data
? Buffer.from(message.data, 'base64').toString()
: 'World';
console.log(`Hello, ${name}!`);
}云功能环境详细信息:
节点:8
google-cloud/pubsub: 1.6.0
问题是,当使用消息吞吐量低(例如,每秒一个请求)的PubSub时,它有时会遇到困难,并且表现出难以置信的高延迟(高达7-9 s或更高的延迟)。
有没有一种方法或方法可以让PubSub在每次(、50 Is、或更小的延迟)时表现良好,即使只有少量的传入消息?
发布于 2020-03-24 00:16:51
如果您总是发布到相同的主题,那么最好保持从pubSubClient.topic(topicName)返回的对象并重用它,无论您有少量消息还是大量消息。如果希望最小化延迟,还需要设置batching设置的batching属性。默认情况下,这是10 is。因为现在有了代码,这意味着每个发布都等待10 As来发送消息,希望能够填充批处理。假设您通过对每个发布的topic调用创建一个新的发布者,则保证总是等待至少10 to。您可以在调用topic时设置它
const publisher = pubSubClient.topic(topicName, {
batching: {
maxMessages: 100,
maxMilliseconds: 1,
},
});如果在重用了从pubSubClient.topic(topicName)返回的对象并更改了maxMilliseconds之后,您仍然会遇到这样的延迟,那么您应该联系Google云支持,以便他们可以查看您正在使用的特定项目和主题,因为这种延迟是绝对不需要的。
https://stackoverflow.com/questions/60818463
复制相似问题