2017-07-13 10 views
5

Używam kolejki Pub/Sub Google do obsługi wiadomości między usługami. Niektórzy subskrybenci łączą się z interfejsami API limitów szybkości.Jak ograniczać stawkę Google Cloud Pub/Sub kolejki

Na przykład, pcham adresy uliczne na temat pub/sub. Mam funkcję Cloud, która subskrybuje (za pośrednictwem push) do tego tematu i wzywa do zewnętrznej usługi geokodowania o ograniczonej stawce. Najlepiej byłoby, gdyby moje adresy uliczne mogły zostać bezzwłocznie spychane na ten temat, a temat zachowałby te wiadomości - wywoływanie subskrybenta w ograniczonym tempie.

Czy istnieje możliwość skonfigurowania takiego opóźnienia lub limitu szybkości dystrybucji wiadomości? Zwiększenie okna Ack naprawdę nie pomaga: zaprojektowałem ten system, aby zapobiec długotrwałym funkcjom.

Odpowiedz

2

aproach do rozwiązania problemu jest użycie: async.queue

Nie masz współbieżność atrybut Wich można zarządzać limit stawki.

// 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 
+1

Moim celem jest przechowywanie zadań w kolejce pub/sub (myślę SNS/SQS), tak, że nie trzeba mieć stale-uruchomiony serwer, a może zamiast używać krótko lambdy. To rozwiązanie wymaga długiego serwera. – cdstamper

Powiązane problemy