Aurabase Logosu
aura tabanıdokümanlar
dokümanlar›Edge Functions›Jobs, cron and the DLQ

İşler, cron ve teslim edilmeyecek mektup kuyruğu

Bir isteğin dışında iş nasıl yürütülür: iş nedir, nasıl yeniden denenir, cron işleri nasıl yaratır ve sonu biten işlerle ne yapılır.

9 dk. oku·Seviye orta düzey·12 Eki 2026 tarihinde revize edildi
Bu İngilizce metin, Fransızca orijinalinden otomatik olarak oluşturulmuştur ve henüz incelenmemiştir.
Bu sayfa otomatik olarak çevrildi. İngilizce versiyonu yetkilidir.
#
Kuyruğa al

1. Bir işi kuyruğa alın

İş, bir işleve yapılan bir arka plan çağrısıdır. service_role anahtarıyla bir sunucudan kuyruğa alın.

server/enqueue.tstypescript
import { createClient } from '@aurabase/aurabase-js'

const admin = createClient(process.env.AURA_URL!, process.env.AURA_SERVICE_ROLE_KEY!)

const { data: job, error } = await admin.functions.enqueueJob('send-report', {
  payload: { month: '2026-10' },
  delaySecs: 60,   // ilk denemeden önce 60 saniye bekleyin
  maxAttempts: 3,  // varsayılan
})
SeçenekVarsayılanAnlamı
payloadnullİstek gövdesi olarak işleve verilen JSON
delaySecs0İlk denemeden önce saniyeler beklenmelidir. İş o zamana kadar pending kalacak.
maxAttempts3Toplam deneme sayısı, ilk dahil

Bir işi getJob(id) veya listJobs({ status, limit }) ile okursunuz (limit 1 ile 500 arasındadır, varsayılan 50'dir). İşin bir status, attempts, max_attempts, error ve tarihleri ​​scheduled_at, started_at, completed_at var.

İşler sunucu tarafı bir araçtır

enqueueJob, getJob ve listJobs bir service_role anahtarına ihtiyaç duyar. Ortak anahtar 403 alır.

#
İşleyici

2. İşleviniz ne alır?

Bir iş, fonksiyonunuzu diğer herhangi bir istek gibi çağırır; halletmeniz gereken üç fark vardır:

ParçaDeğer
YöntemJOB (POST değil)
Yol/jobs/<job id>
Vücutİş payload, JSON olarak
Kimlik başlıklarıYok: x-aura-role ve x-aura-user-id yok
aurabase/functions/send-report/index.tstypescript
Deno.serve(async (req) => {
  const jobId = new URL(req.url).pathname.split('/').pop()
  const { month } = await req.json()
  // …jobID'yi bir kimlik anahtarı olarak kullanarak raporu oluşturun ve gönderin
  return new Response('ok')
})

Gerçek bir çağrı günlüğe kaydedildi {"method":"JOB","path":"/jobs/d443d541-…","role":null,"userId":null,"body":"{\"items\":[\"a\",\"b\"],\"order\":42}"}.

Bir iş, kullanıcı olmadan çalışır: x-aura-user-id öğesine güvenmeyin. Çalışma bir kullanıcıya aitse kullanıcının kimliğini veri yüküne ekleyin.

#
Yeniden denemeler

3. Yaşam döngüsü ve yeniden denemeler

statusestext
pending ──claimed──▶ running ──▶ completed
   ▲                    │
   └── after 5 s ◀── failed (attempts left)
                        └──▶ dead (no attempts left)
  • Bir iş en az bir kez çalıştırılır. Bir işçi çalışırken durursa iki kez çalışabilir, bu nedenle işlevi bağımsız yapın.
  • Başarısız bir girişim, maxAttempts değerine ulaşılana kadar 5 saniyelik sabit bir gecikmeden sonra yeniden denenir. O zaman iş dead olur. Gecikme ve varsayılan deneme sayısı hizmet ayarlarıdır (JOB_RETRY_DELAY_SECS, JOB_MAX_RETRIES).
  • Kiralandıktan sonra hala running olan bir iş (varsayılan olarak 450 saniye) hizmet tarafından geri alınır.
  • Biten işler varsayılan olarak 14 gün süreyle tutulur.
İşlevinizden kaynaklanan bir HTTP hatası bir başarısızlık değildir

Durum kodu ne olursa olsun, işleviniz yanıtını verir vermez bir iş completed olur. Gerçek bir çalıştırmada, 500 değerini döndüren bir işlev, bir denemeden sonra bir completed işi üretti ve bir daha asla denenmedi.

Bir iş başarısız olur ve yalnızca çağrının kendisi başarısız olduğunda yeniden denenir: işlev mevcut olmadığında veya etkin olmadığında, çalışma zamanına ulaşılamadığında veya çağrı zaman aşımına uğradığında. Kendi kodunuz bir hata algıladığında yeniden denemek istiyorsanız, durum koduna güvenmek yerine işleyiciden yeni bir işi (geri çekilme için delaySecs ile) sıraya alın.

Aynı gerçek çalıştırmada, var olmayan bir işleve yönelik bir iş şu sırayı izledi: 1. deneme Fonction 'ghost' introuvable ile 3 saniyede başarısız oldu, 2. deneme yaklaşık 9 saniyede başarısız oldu ve iş attempts ile max_attempts değerine eşit olarak dead oldu.

#
Kurtarma

4. Teslim edilmeyen mektuplar kuyruğu

Ölü işler kuyrukta kalır ve listelenip yeniden denenebilir. Bu rotaların henüz bir SDK yöntemi yok: HTTP'yi service_role anahtarıyla kullanın.

terminalbash
# ölü işleri listele
curl "$AURA_URL/v1/functions/jobs/dlq" -H "apikey: $AURA_SERVICE_ROLE_KEY"

# bir işi yeniden dene
curl -X POST "$AURA_URL/v1/functions/jobs/$JOB_ID/retry" -H "apikey: $AURA_SERVICE_ROLE_KEY"

# Her ölü işi yeniden dene (1000'e kadar)
curl -X POST "$AURA_URL/v1/functions/jobs/dlq/requeue" -H "apikey: $AURA_SERVICE_ROLE_KEY"
# → {"data":{"requeued":1},"meta":null}

Yeniden deneme, deneme sayacını sıfırlamadan işi pending konumuna geri koyar, böylece tam olarak bir deneme daha alır ve tekrar başarısız olursa dead durumuna geri döner. Yeniden denemeden önce nedeni düzeltin (örneğin, eksik işlevi dağıtın).

#
Program

5. Cron ile zamanlama

Bir cron girişi işlevin kendisini çağırmaz: her tetiklendiğinde bir işi kuyruğa alır.

server/cron.tstypescript
await admin.functions.createCronJob('nightly-cleanup', '0 3 * * *', 'cleanup', {
  payload: { dryRun: false },
})

const { data: crons } = await admin.functions.listCronJobs()
await admin.functions.deleteCronJob('nightly-cleanup') // kimliğe göre değil, NAME'e göre
  • Zamanlamada 5 alan (min hour day month weekday) veya 6 alan (sec min hour day month weekday) bulunur. 5 alanlı bir program 0 saniyenin önüne geçer: */1 * * * * 0 */1 * * * * olarak depolanır.
  • @daily gibi takma adlar, beklenen biçimi belirten 400 ile reddedilir.
  • Zamanlar UTC'dedir.
  • last_run ve next_run ilk ateşlemeye kadar null'dir. Gerçek bir çalışmada, 15:40'ta oluşturulan bir program 15:41:00'de tetiklendi ve ardından next_run 15:42:00'i gösterdi.
  • Girişi oluşturduğunuzda yük dondurulur.
  • Bilinmeyen bir adın silinmesi 404 değerini döndürür. Bir cron girişinin silinmesi aynı zamanda tetiklenmesini de durdurur.
  • SDK'da getCronJob veya updateCronJob yok: girişi silin ve yeniden oluşturun.

Tamamen veritabanı çalışması için, Postgres pg_cron uzantısı bir işleve gidiş-dönüş yolculuğunu önler: Cron sayfasına bakın.