Funkcje kolejki zadań wykorzystują możliwości Google Zadania w Cloud aby pomóc w działaniu aplikacji, które zajmują dużo czasu bądź inne zasoby lub usługi o ograniczonej przepustowości. asynchronicznie poza głównym przepływem aplikacji.
Załóżmy na przykład, że chcesz utworzyć kopie zapasowe dużego zestawu obrazów pliki, które są obecnie hostowane w interfejsie API z limitem liczby żądań. Jeśli chcesz być odpowiedzialnym konsumentem tego interfejsu API, należy przestrzegać związanych z nim limitów liczby żądań. Dodatkowo tego rodzaju długotrwałe zadanie może być podatne na awarie z powodu przekroczenia limitów czasu i i ograniczenia pamięci.
Aby ograniczyć tę złożoność, możesz napisać funkcję kolejki zadań, która ustawi podstawowe
opcje zadania, takie jak scheduleTime
i dispatchDeadline
, a następnie przekaż
do kolejki w Cloud Tasks. Zadania Cloud
zaprojektowano tak, aby skutecznie kontrolować zatory
zasad ponawiania w przypadku tego typu operacji.
Pakiet SDK Firebase dla Cloud Functions dla Firebase w wersji 3.20.1 i nowszych współdziała ze sobą z pakietem Firebase Admin SDK w wersji 10.2.0 lub nowszej, aby obsługiwać funkcje kolejki zadań.
Korzystanie z funkcji kolejki zadań w Firebase może spowodować naliczenie opłat za Przetwarzanie w Cloud Tasks. Zobacz Cennik Cloud Tasks .
Tworzenie funkcji kolejki zadań
Aby użyć funkcji kolejki zadań, wykonaj ten przepływ pracy:
- Napisz funkcję kolejki zadań za pomocą pakietu SDK Firebase dla Cloud Functions.
- Przetestuj funkcję przez aktywowanie jej za pomocą żądania HTTP.
- wdrożyć funkcję za pomocą interfejsu wiersza poleceń Firebase, Podczas wdrażania zadania kolejki po raz pierwszy, interfejs wiersza poleceń utworzy kolejka zadań w Cloud Tasks z opcjami (ograniczenie liczby żądań i ponowienie próby) określonymi w kodzie źródłowym.
- Do nowo utworzonej kolejki zadań możesz dodawać zadania i przekazywać parametry, aby je skonfigurować w razie potrzeby harmonogram wykonywania. Aby to zrobić, napisz kod za pomocą pakietu Admin SDK i wdrożyć go w Cloud Functions dla Firebase.
Zapisywanie funkcji kolejki zadań
Użyj formatu onDispatch
aby rozpocząć pisanie funkcji kolejki zadań. Ważna informacja
Elementem tworzenia funkcji kolejki zadań jest ustawienie
ograniczając konfigurację. Przykładowe fragmenty kodu na tej stronie pochodzą z aplikacji, która ustawia
tworzy usługę tworzenia kopii zapasowych wszystkich zdjęć z NASA
Zdjęcie dnia poświęcone astronomii:
Konfigurowanie funkcji kolejki zadań
Funkcje kolejki zadań mają rozbudowany zestaw ustawień konfiguracji precyzyjnego kontrolowania limitów liczby żądań i ponownego działania kolejki zadań:
exports.backupApod = functions
.runWith( {secrets: ["NASA_API_KEY"]})
.tasks.taskQueue({
retryConfig: {
maxAttempts: 5,
minBackoffSeconds: 60,
},
rateLimits: {
maxConcurrentDispatches: 6,
},
}).onDispatch(async (data) => {
retryConfig.maxAttempts=5
: każde zadanie w kolejce zadań jest automatycznie ponawiać próby maksymalnie 5 razy. Pomaga to ograniczyć błędy przejściowe, takie jak sieć lub tymczasowe zakłócenia w działaniu zależnej usługi zewnętrznej.retryConfig.minBackoffSeconds=60
: każde zadanie jest powtarzane przez co najmniej 60 sekund niezależnie od każdej próby. Powoduje to duży bufor pomiędzy każdą próbą aby nie zużywać ich zbyt szybko.rateLimits.maxConcurrentDispatch=6
: maksymalnie 6 zadań jest wysyłanych w jednym miejscu danego czasu. Pomaga to zapewnić stały napływ żądań do źródła i pomaga zmniejszyć liczbę aktywnych instancji oraz uruchomień „na zimno”.
Testowanie funkcji kolejki zadań
Funkcje kolejki zadań w Pakiecie emulatorów lokalnych Firebase są przedstawiane jako proste funkcji HTTP. Możesz przetestować emulowaną funkcję zadania, wysyłając żądanie HTTP POST żądania z ładunkiem danych JSON:
# start the Firebase Emulators
firebase emulators:start
# trigger the emulated task queue function
curl \
-X POST # An HTTP POST request...
-H "content-type: application/json" \ # ... with a JSON body
http://localhost:$PORT/$PROJECT_ID/$REGION/$NAME \ # ... to function url
-d '{"data": { ... some data .... }}' # ... with JSON encoded data
Wdrażanie funkcji kolejki zadań
Wdróż funkcję kolejki zadań za pomocą interfejsu wiersza poleceń Firebase:
$ firebase deploy --only functions:backupApod
Przy wdrażaniu funkcji kolejki zadań po raz pierwszy interfejs wiersza poleceń tworzy kolejka zadań w Cloud Tasks z opcjami (ograniczanie liczby żądań i ponawianie prób) podany w kodzie źródłowym.
Jeśli podczas wdrażania funkcji wystąpią błędy uprawnień, upewnij się, że odpowiednie role uprawnień są przypisane do użytkownika wykonującego polecenia wdrożeniowe.
Kolejkowanie funkcji kolejki zadań
Funkcje kolejki zadań można dodać do kolejki w Cloud Tasks z zaufanego środowiska serwera, np. Cloud Functions dla Firebase, które korzysta z pakietu Firebase Admin SDK Node.js. Jeśli nie znasz jeszcze pakietów Admin SDK, zobacz Aby rozpocząć, dodaj Firebase do serwera.
W typowym procesie pakiet Admin SDK tworzy nowe zadanie i umieszcza je w kolejce Cloud Tasks i ustawia jego konfigurację:
exports.enqueueBackupTasks = functions.https.onRequest(
async (_request, response) => {
const queue = getFunctions().taskQueue("backupApod");
const enqueues = [];
for (let i = 0; i <= 10; i += 1) {
// Enqueue each task with i*60 seconds delay. Our task queue function
// should process ~1 task/min.
const scheduleDelaySeconds = i * 60
enqueues.push(
queue.enqueue(
{ id: `task-${i}` },
{
scheduleDelaySeconds,
dispatchDeadlineSeconds: 60 * 5 // 5 minutes
},
),
);
}
await Promise.all(enqueues);
response.sendStatus(200);
});
scheduleDelaySeconds
: przykładowy kod próbuje rozłożyć wykonanie skryptu zadania przez powiązanie opóźnienia n-tego minuty z n-tym zadaniem. Ten przekłada się na wyzwalanie ~ 1 zadanie/min. Pamiętaj, że możesz też użyćscheduleTime
, jeśli chcesz aktywować Cloud Tasks wykonać zadanie w określonym czasie.dispatchDeadlineSeconds
: maksymalny czas Cloud Tasks zaczeka na wykonanie danego zadania. Cloud Tasks spróbuje ponownie zadanie po ponownej próbie konfiguracji kolejki lub do upłynięcia tego terminu. W próbce kolejka jest skonfigurowana tak, aby ponawiać zadanie maksymalnie 5 razy, ale zadanie jest automatycznie anulowane, jeśli cały proces (w tym ponowna próba) trwa to dłużej niż 5 minut.
Rozwiązywanie problemów
Włącz logowanie w Cloud Tasks
Logi z Cloud Tasks zawierają przydatne informacje diagnostyczne, takie jak stanu żądania powiązanego z zadaniem. Domyślnie logi z Usługa Cloud Tasks jest wyłączona ze względu na dużą liczbę logów, które może obsłużyć co możesz potencjalnie wygenerować w swoim projekcie. Zalecamy włączenie dzienników debugowania podczas aktywnego rozwijania i debugowania funkcji kolejki zadań. Zobacz Włączam .
Uprawnienia
Podczas dodawania zadań do kolejki lub podczas dodawania do kolejki mogą wystąpić PERMISSION DENIED
błędy
Cloud Tasks próbuje wywołać funkcje kolejki zadań. Upewnij się, że atrybuty
projekt ma te powiązania uprawnień:
Tożsamość używana do kolejkowania zadań na potrzeby Cloud Tasks Uprawnienia:
cloudtasks.tasks.create
.W przykładzie jest to domyślne konto usługi App Engine.
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
--role=roles/cloudtasks.enqueuer
Tożsamość używana do kolejkowania zadań w Cloud Tasks wymaga uprawnień aby używać konta usługi powiązanego z zadaniem w Cloud Tasks.
W przykładzie jest to domyślne konto usługi App Engine.
Zobacz dokumentację Google Cloud IAM. instrukcje dodawania domyślnego konta usługi App Engine jako użytkownik domyślnego konta usługi App Engine.
Tożsamość używana do aktywowania funkcji kolejki zadań wymaga Uprawnienie
cloudfunctions.functions.invoke
.W przykładzie jest to domyślne konto usługi App Engine.
gcloud functions add-iam-policy-binding $FUNCTION_NAME \
--region=us-central1 \
--member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
--role=roles/cloudfunctions.invoker