Görev sırası işlevleri, Google Cloud Tasks Uygulamanızın zaman alan, kaynak yoğun veya bant genişliği sınırlı olarak çalıştırılmasına yardımcı olmak için ana uygulama akışınızın dışında eşzamansız olarak yapabilirsiniz.
Örneğin, geniş bir resim kümesinin yedeklerini oluşturmak istediğinizi Şu anda hız sınırı olan bir API'de barındırılan dosyalar. Bir insanın sorumlu tüketicisiyseniz, oran sınırlarına uymanız gerekir. Ayrıca, bu tür uzun süreli işler, zaman aşımları ve anlamına gelir.
Bu karmaşıklığı azaltmak için, Arkadaş Bitkiler projenizde kullanılabilecek temel
scheduleTime
ve dispatchDeadline
gibi görev seçeneklerini ayarlayabilir,
işlevini Cloud Tasks konumunda bir sıraya alabilirsiniz. Cloud Tasks
verimli bir şekilde tıkanıklık kontrolünü sağlamak ve
yeniden deneme politikalarında bulunmayı unutmayın.
Cloud Functions for Firebase v3.20.1 ve sonraki sürümler için Firebase SDK'sı birlikte çalışıyor görev sırası işlevlerini desteklemek için Firebase Admin SDK v10.2.0 ve sonraki sürümlerle.
Görev sırası işlevlerinin Firebase ile kullanılması, Cloud Tasks işleniyor. Görüntüleyin Cloud Tasks fiyatlandırması konulu videomuzu izleyin.
Görev sırası işlevleri oluşturma
Görev sırası işlevlerini kullanmak için şu iş akışını izleyin:
- Cloud Functions için Firebase SDK'sını kullanarak bir görev sırası işlevi yazın.
- İşlevinizi bir HTTP isteği ile tetikleyerek test edin.
- İşlevinizi Firebase KSA ile dağıtın. Görevinizi dağıtırken ilk kez kullanıyorsanız CLI, yeni bir Cloud Tasks hücresindeki görev sırası seçenekleri (hız sınırlama ve yeniden deneme) kullanarak oluşturun.
- Yeni oluşturulan görev sırasına, ayarlamak için parametreleri ileterek görevleri ekleyin bir yürütme planı olabilir. Bunu, kodu yazarak Admin SDK kullanma ve Cloud Functions for Firebase ürününe dağıtma.
Görev sırası işlevlerini yazma
onDispatch
kullanın
görev sırası fonksiyonlarını yazmaya başlayın. Önemli bir
görev sırası işlevi yazmanın bir parçası da sıra başına yeniden deneme ve hızı ayarlamaktır.
sınırlayıcı yapılandırma. Bu sayfadaki kod örnekleri,
NASA'nın kendi evindeki
tüm görüntüleri yedekleyen bir hizmeti
Günün Astronomi Resmi:
Görev sırası işlevlerini yapılandırma
Görev sırası işlevleri, güçlü bir yapılandırma ayarı grubuyla birlikte gelir 'i kullanarak bir görev sırasının hız sınırlarını ve yeniden deneme davranışını hassas bir şekilde kontrol edebilirsiniz:
exports.backupApod = functions
.runWith( {secrets: ["NASA_API_KEY"]})
.tasks.taskQueue({
retryConfig: {
maxAttempts: 5,
minBackoffSeconds: 60,
},
rateLimits: {
maxConcurrentDispatches: 6,
},
}).onDispatch(async (data) => {
retryConfig.maxAttempts=5
: Görev sırasındaki her görev otomatik olarak en fazla 5 kez yeniden denendi. Bu, ağ gibi geçici hataları azaltmaya yardımcı olur bağımlı, harici bir hizmette hatalar veya geçici hizmet aksamaları olabilir.retryConfig.minBackoffSeconds=60
: Her görev en az 60 saniye sonra yeniden denenir hariç tutmanızı sağlar. Bu, her deneme arasında büyük bir tampon sağlar Dolayısıyla, 5 yeniden deneme hakkını çok hızlı bir şekilde bitirmek için acele etmeyiz.rateLimits.maxConcurrentDispatch=6
: En fazla 6 görev tek seferde dağıtılır yardımcı olabilir. Bu sayede, temel alınan kaynağa istikrarlı bir talep akışı sağlanabilir işlevi görebilir ve etkin örneklerin ve baştan başlatmaların sayısını azaltmaya yardımcı olur.
Görev sırası işlevlerini test etme
Firebase Local Emulator Suite içindeki görev sırası işlevleri, basit bir şekilde kullanıma sunuldu HTTP işlevleri. HTTP POST isteği göndererek emüle edilmiş bir görev işlevini test edebilirsiniz. bir json veri yüküyle istek:
# 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
Görev sırası işlevlerini dağıtma
Görev sırası işlevini Firebase CLI kullanarak dağıtın:
$ firebase deploy --only functions:backupApod
Bir görev sırası işlevini ilk kez dağıtırken CLI, bir görev sırası işlevi Cloud Tasks uygulamasında seçeneklerle görev sırası (hız sınırlama ve yeniden dene) kaynak kodunuzda belirtilir.
İşlevleri dağıtırken izin hatalarıyla karşılaşırsanız uygun IAM rollerini komutu, dağıtım komutlarını çalıştıran kullanıcıya atanır.
Görev sırası işlevlerini sıraya koyma
Görev sırası işlevleri, güvenilir bir kullanıcıdan Cloud Tasks içinde sıraya alınabilir için Firebase Admin SDK kullanarak Cloud Functions for Firebase gibi bir sunucu ortamı Node.js'yi tıklayın. Admin SDK konusunda yeniyseniz şuraya bakın: Başlamak için Firebase'i bir sunucuya ekleyin.
Tipik bir akışta Admin SDK yeni bir görev oluşturur ve onu Cloud Tasks ve görevin yapılandırmasını ayarlar:
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
: Örnek kod, ve N’inci görev için N’inci dakika gecikmesini ilişkilendirerek görevleri tamamlayın. Bu Yaklaşık 1 görev/dakika tetikleme anlamına gelir. Şunu da deneyebilirsiniz: Cloud Tasks öğesinin tetiklemesini istiyorsanızscheduleTime
görev zaman çizelgesidir.dispatchDeadlineSeconds
: Maksimum süre Cloud Tasks bekleyecek tamamlanması gereken aktiviteleri ifade eder. Cloud Tasks yeniden deneyecek yeniden denemenin ardından görev konfigürasyonunu kullanabilirsiniz. Örnekte, sıra, görevi en fazla 5 kez yeniden deneyecek şekilde yapılandırılmıştır ancak görev İşlemin tamamı (yeniden deneme denemeleri dahil) durumunda otomatik olarak iptal edilir 5 dakikadan fazla sürer.
Sorun giderme
Cloud Tasks">Cloud Tasks günlük kaydını aç
Cloud Tasks günlükleri, aşağıdakiler gibi yararlı teşhis bilgileri içerir: bir görevle ilişkili isteğin durumudur. Varsayılan olarak, Cloud Tasks, kaydedebileceği günlük hacminin yüksek olması nedeniyle kapatıldı üzerinde etkisi olur. Hata ayıklama günlüklerini etkinleştirmenizi öneririz ve hata ayıklama işlemleri yürütürken sizi aktif olarak kilitleyin. Görüntüleyin Açılıyor günlük kaydı.
IAM İzinleri
Görevleri sıraya koyarken veyaPERMISSION DENIED
Cloud Tasks, görev sırası işlevlerinizi çağırmaya çalışıyor. Araç açılış sayfalarınızla ilgili
projede şu IAM bağlamaları bulunur:
Görevleri Cloud Tasks ihtiyaçlarına göre sıraya almak için kullanılan kimlik
cloudtasks.tasks.create
IAM izni.Örnekte bu App Engine varsayılan hizmet hesabıdır
gcloud projects add-iam-policy-binding $PROJECT_ID \
--member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
--role=roles/cloudtasks.enqueuer
Görevleri Cloud Tasks için sıraya almak üzere kullanılan kimliğin izne ihtiyacı var Cloud Tasks içindeki bir görevle ilişkili hizmet hesabını kullanmak için.
Örnekte bu App Engine varsayılan hizmet hesabıdır.
Google Cloud IAM belgelerini inceleyin App Engine varsayılan hizmet hesabını ekleme talimatları için App Engine varsayılan hizmet hesabının kullanıcısı olarak.
Görev sırası işlevini tetiklemek için kullanılan kimlik
cloudfunctions.functions.invoke
izni.Örnekte bu App Engine varsayılan hizmet hesabıdır
gcloud functions add-iam-policy-binding $FUNCTION_NAME \
--region=us-central1 \
--member=serviceAccount:${PROJECT_ID}@appspot.gserviceaccount.com \
--role=roles/cloudfunctions.invoker