如何限制Google Cloud Pub/Sub Queue

cds*_*per 11 node.js google-cloud-pubsub google-cloud-functions

我正在使用Google的Pub/Sub队列来处理服务之间的消息.一些订户连接到速率限制API.

例如,我正在将街道地址推送到pub/sub主题.我有一个Cloud功能,可以订阅(通过推送)到该主题,并呼叫外部速率限制地理编码服务.理想情况下,我的街道地址可以毫不拖延地推送到主题上,主题将保留这些消息 - 以限速的方式呼叫订户.

无论如何配置这样的延迟或消息分发率限制?增加Ack窗口并没有多大帮助:我已经构建了这个系统以防止长时间运行的功能.

Mat*_*lke 5

因为到目前为止还没有描述解决方法的答案,所以我现在将通过声明目前没有办法做到这一点来回答这个问题。有解决方法(请参阅该问题的评论,解释如何使用 Cloud Scheduler 创建排队系统),但无法仅在请求订阅上设置一个设置,以在其与其主题之间创建速率限制。

不过,我为此提出了一个功能请求。如果您需要此功能,请就跟踪的问题提出意见。

https://issuetracker.google.com/issues/197906331


Ale*_*aru 2

解决您的问题的方法是使用:async.queue

在那里你有一个并发属性,你可以管理速率限制。

// create a queue object with concurrency 2
var q = async.queue(function(task, callback) {
    console.log('hello ' + task.name);
    callback();
}, 2);

// assign a callback
q.drain = function() {
    console.log('all items have been processed');
};

// add some items to the queue
q.push({name: 'foo'}, function(err) {
    console.log('finished processing foo');
});

// quoted from async documentation
Run Code Online (Sandbox Code Playgroud)

  • 我的目标是将任务存储在发布/订阅队列中(想想 SNS/SQS),这样我就不必拥有持续运行的服务器,并且可以使用短暂的 lambda 来代替。该解决方案需要长时间运行的服务器。 (3认同)