Flame Blog
Comment publier manuellement des messages sur l'émulateur Pub/Sub
Appeler l'émulateur Pub/Sub directement via l'API HTTP.
Publié le 24 avril 2026
Par Val — Article original rédigé en anglais
Lorsque vous définissez des fonctions Pub/Sub, un topic correspondant est automatiquement provisionné dans l’émulateur.
export const pubsubFunction = functions.pubsub.onMessagePublished(
{ topic: 'my-topic' },
event => {
console.log({ event, json: event.data.message.json })
}
) export const pubsubFunction = functions.pubsub
.topic('my-topic')
.onPublish(message => {
console.log({ message, json: message.json })
}) L’émulateur Pub/Sub s’exécute par défaut sur le port 8085 et vous pouvez publier des messages dessus en utilisant le SDK Pub/Sub dans votre langage préféré, par exemple :
import { PubSub } from '@google-cloud/pubsub'
const pubsub = new PubSub({
projectId: 'my-project',
apiEndpoint: 'localhost:8085',
})
// On peut aussi utiliser un constructeur vide avec les variables d'environnement
// `GOOGLE_CLOUD_PROJECT` et `PUBSUB_EMULATOR_HOST` définies.
// const pubsub = new PubSub()
const topic = pubsub.topic('my-topic')
await topic.publishMessage({
json: {
foo: 'bar',
},
})
Mais dans cet article, je veux entrer dans les détails et montrer comment utiliser directement l’API HTTP de l’émulateur.
Publier un message
Pour publier un message sur un topic, utilisez le point de terminaison :publish :
curl -X POST 'http://127.0.0.1:8085/v1/projects/my-project/topics/my-topic:publish' \
-H 'Content-Type: application/json' \
-d '{"messages": [{"data": "eyJmb28iOiJiYXIifQ=="}]}'
Le champ data à l’intérieur de chaque message doit être encodé en Base64. Ici, la charge utile est {"foo": "bar"}.
Buffer.from(JSON.stringify({ foo: 'bar' })).toString('base64')
// 'eyJmb28iOiJiYXIifQ=='
Pour gérer l’encodage Base64 dans la même commande, nous pouvons faire ce qui suit :
curl -X POST 'http://127.0.0.1:8085/v1/projects/my-project/topics/my-topic:publish' \
-H 'Content-Type: application/json' \
-d '{"messages": [{"data": "'$(echo '{"foo": "bar"}' | base64)'"}]}'
Vous pouvez également inclure des attributs de message :
curl -X POST "http://127.0.0.1:8085/v1/projects/my-project/topics/my-topic:publish" \
-H "Content-Type: application/json" \
-d '{
"messages": [
{
"data": "eyJmb28iOiJiYXIifQ==",
"attributes": {
"foo": "bar"
}
}
]
}'
Le point de terminaison retournera les identifiants des messages publiés :
{
"messageIds": ["1"]
}
Appeler la fonction sous-jacente directement
Si vous voulez contourner complètement l’émulateur Pub/Sub et appeler directement la fonction derrière le topic, consultez notre guide dédié pour appeler les fonctions de l’émulateur Firebase.
Arrêtez de deviner avec Flame ✨
Peut-être que vous ne voulez pas vous embêter avec des commandes cURL et l’encodage Base64 lors du débogage de vos fonctions Pub/Sub.
C’est pourquoi nous avons construit Flame, une interface utilisateur pour l’émulateur Firebase avec tout ce qui manque à localhost:4000.
Voyez tous vos topics Pub/Sub et files de tâches d’un coup d’œil, composez des messages avec une interface conviviale, et publiez directement sur l’émulateur. Pas d’encodage Base64 requis.
Flame vous offre l’interface Pub/Sub qui manque à localhost:4000, et propose également une interface améliorée pour Firebase Auth, Firestore, Functions, et plus encore.
Si cela vous semble intéressant, essayez Flame !