AyKarsi
AyKarsi

Reputation: 9675

Firebase PubSub Emulator not recieving messages

I'm trying to get the firebase emulator, to trigger cloud functions using pubsub publishing. The basic setup works outside of the cloud functions. When trying to connect the cloud function, no message ever appears.

I have the feeling, that I doing something fundamentally wrong.

Publish code:

import { PubSub, Topic } from '@google-cloud/pubsub'; 
const topicName = 'MyTopic';
const [taskTopic] = await pubsub.createTopic(topicName);
await this.taskTopic.publish(Buffer.from(msg));

"Manual" Subscription: works

 [subscription] = await this.renderTaskTopic.createSubscription(subscriptionName);
 subscription.on('message', (message) => {
    console.log('Received message:', message.data.toString());
    process.exit(0);
 });

Subscription using cloud function: never gets called in the emulator


export const subscribeToRenderTask = functions.pubsub.topic(topicName)
    .onPublish(async (message: functions.pubsub.Message) => {
        console.log('subscribeToRenderTask', message.data);
     }

The emalutor setup seems fine

 functions: The Firebase Authentication emulator is not running, so calls to Firebase Authentication will affect production.
✔  functions[convert]: http function initialized (http://0.0.0.0:5001/puredio-development/europe-west3/convert).
✔  functions[subscribeToRenderTask]: pubsub function initialized.

┌─────────────────────────────────────────────────────────────┐
│ ✔  All emulators ready! It is now safe to connect your app. │
│ i  View Emulator UI at http://0.0.0.0:8081                  │
└─────────────────────────────────────────────────────────────┘

┌───────────┬────────────────┬───────────────────────────────┐
│ Emulator  │ Host:Port      │ View in Emulator UI           │
├───────────┼────────────────┼───────────────────────────────┤
│ Functions │ 0.0.0.0:5001   │ http://0.0.0.0:8081/functions │
├───────────┼────────────────┼───────────────────────────────┤
│ Firestore │ 0.0.0.0:8080   │ http://0.0.0.0:8081/firestore │
├───────────┼────────────────┼───────────────────────────────┤
│ Pub/Sub   │ 127.0.0.1:8085 │ n/a                           │
└───────────┴────────────────┴───────────────────────────────┘
  Emulator Hub running at 127.0.0.1:4400
  Other reserved ports: 4500

Upvotes: 1

Views: 2138

Answers (1)

AyKarsi
AyKarsi

Reputation: 9675

RTFM: I needed to set the following env vars so that my tests could actually find the pub sub emulator

export PUBSUB_EMULATOR_HOST = 'localhost:8085'
export PUBSUB_PROJECT_ID = 'my-project'

Upvotes: 2

Related Questions