Zurück zum Blog

Flame Blog

So lösen Sie Cloud Tasks manuell im Emulator aus

Veröffentlichen von Cloud Tasks an den Emulator über die HTTP-API.

Veröffentlicht am 24. April 2026

Von Val — Ursprünglich auf Englisch verfasst

Wenn Sie Task-Queue-Handler in Ihren Firebase Functions definieren, wird automatisch eine entsprechende Task-Warteschlange im Emulator erstellt.

export const taskQueueFunction = functions.tasks.onTaskDispatched(
  {
    retryConfig: {
      maxAttempts: 5,
      minBackoffSeconds: 60,
    },
    rateLimits: {
      maxConcurrentDispatches: 6,
    },
  },
  async request => {
    console.log({ data: request.data })
  }
)
export const taskQueueFunction = functions.tasks
  .taskQueue({
    retryConfig: {
      maxAttempts: 5,
      minBackoffSeconds: 60,
    },
    rateLimits: {
      maxConcurrentDispatches: 6,
    },
  })
  .onDispatch(async data => {
    console.log({ data })
  })

Der Cloud Tasks-Emulator läuft standardmäßig auf Port 9499 und Sie können Tasks mit dem SDK pushen:

import { initializeApp } from 'firebase-admin/app'
import { getFunctions } from 'firebase-admin/functions'

// Es kann auch die Umgebungsvariable `GOOGLE_CLOUD_PROJECT` verwendet werden
initializeApp({ projectId: 'my-project' })

process.env.CLOUD_TASKS_EMULATOR_HOST = 'localhost:9499'

const queue = getFunctions().taskQueue('taskQueueFunction')

await queue.enqueue(data)

Aber in diesem Beitrag möchte ich ins Detail gehen und zeigen, wie man Tasks direkt über die HTTP-API des Emulators erstellt.

Eine Task erstellen

Um eine Task manuell in eine Warteschlange zu pushen, POSTen Sie an den Tasks-Endpunkt des Emulators:

curl -X POST 'http://localhost:9499/projects/my-project/locations/us-central1/queues/taskQueueFunction/tasks' \
  -H 'Content-Type: application/json' \
  -d '{
  "task": {
    "httpRequest": {
      "httpMethod": "POST",
      "url": "http://localhost:5001/my-project/us-central1/taskQueueFunction",
      "body": "eyJkYXRhIjp7ImZvbyI6ImJhciJ9fQ==",
      "headers": {
        "Content-Type": "application/json"
      }
    }
  }
}'

Die Warteschlange ist nicht direkt mit der Funktion verknüpft, daher müssen wir explizit die URL zum Functions-Emulator angeben, an den die Task dispatched wird.

Das Feld body innerhalb von httpRequest ist Base64-kodiert und die tatsächliche Nutzlast muss in einem data-Feld enthalten sein. In diesem Beispiel übergeben wir {"data": {"foo": "bar"}}.

Buffer.from(JSON.stringify({ data: { foo: 'bar' } })).toString('base64')
// 'eyJkYXRhIjp7ImZvbyI6ImJhciJ9fQ=='

Wir können die Base64-Kodierung im Befehl inline für mehr Komfort durchführen:

curl -X POST 'http://localhost:9499/projects/my-project/locations/us-central1/queues/taskQueueFunction/tasks' \
  -H 'Content-Type: application/json' \
  -d '{
  "task": {
    "httpRequest": {
      "httpMethod": "POST",
      "url": "http://localhost:5001/my-project/us-central1/taskQueueFunction",
      "body": "'$(echo '{"data": {"foo": "bar"}}' | base64)'",
      "headers": {
        "Content-Type": "application/json"
      }
    }
  }
}'

Der Emulator wird dann die Task an Ihre Function dispatch, genau wie in der Produktion, mit Retries und allem.

Die Function direkt aufrufen

Da der Task-Queue-Emulator nur die HTTP-Anfrage an den Functions-Emulator weiterleitet, können Sie auch die Function direkt aufrufen. Im obigen Beispiel wäre das (aus unserer Anleitung zum Aufrufen von Firebase-Emulator-Funktionen):

curl -X POST 'http://localhost:5001/my-project/us-central1/taskQueueFunction' \
  -H 'Content-Type: application/json' \
  -d '{"data": {"foo": "bar"}}'

Sie erhalten zwar kein Retry-Verhalten, aber es ist schneller und Sie benötigen keinen Cloud Tasks API-Overhead.

Flame: die fehlende Benutzeroberfläche für den Emulator ✨

Haben Sie sich jemals gewünscht, dass localhost:4000 einen Admin für die Emulator-Warteschlangen und -Funktionen hätte?

Deshalb haben wir Flame gebaut, eine Firebase-Emulator-Benutzeroberfläche mit allem, was der integrierte Admin nicht bietet.

Kein Raten mehr mit cURL-Befehlen, JSON-Protokollen und Base64-Kodierung beim Debuggen Ihrer Warteschlangen, Tasks und Firebase Functions. Geben Sie einfach Ihre Nutzlast ein und senden Sie ab.

Task-Queue-Nachrichtenerstellung in Flame

Kommt auch mit einer verbesserten Benutzeroberfläche für Firebase Auth, Firestore und mehr. Probieren Sie es aus!