Pub/Sub triggers

Google Cloud 's Pub/Sub is a globally distributed message bus that automatically scales as you need it. You can trigger a function whenever a new Pub/Sub message is sent to a specific topic.

Import the required modules

To get started, import the modules required for handling Pub/Sub events:

Node.js

  const 
  
 { 
 onMessagePublished 
 } 
  
 = 
  
 require 
 ( 
 "firebase-functions/pubsub" 
 ); 
 const 
  
 logger 
  
 = 
  
 require 
 ( 
 "firebase-functions/logger" 
 ); 
  
 

Python

  from 
  
 firebase_functions 
  
 import 
 pubsub_fn  
 
 . 
 py 
 

Trigger the function

You must specify the Pub/Sub topic name that you want to trigger your function, and set the event within the event handler:

Node.js

  exports 
 . 
 hellopubsub 
  
 = 
  
 onMessagePublished 
 ( 
 "topic-name" 
 , 
  
 ( 
 event 
 ) 
  
 = 
>  
 { 
  
 

Python

  @pubsub_fn 
 . 
 on_message_published 
 ( 
 topic 
 = 
 "topic-name" 
 ) 
 def 
  
 hellopubsub 
 ( 
 event 
 : 
 pubsub_fn 
 . 
 CloudEvent 
 [ 
 pubsub_fn 
 . 
 MessagePublishedData 
 ]) 
 - 
> None 
 : 
  
 """Log a message using data published to a Pub/Sub topic.""" 
  
 

Access the pub/sub message payload

The payload for the Pub/Sub message is accessible from the message object returned to your function. For messages with JSON in the Pub/Sub message body, the Firebase SDK for Cloud Functions has a helper property to decode the message. For example, here is a message published with a simple JSON payload:

 gcloud pubsub topics publish topic-name --message '{"name":"Xenia"}' 

You can access a JSON data payload like this via the json property:

Node.js

  
 // Get the `name` attribute of the PubSub message JSON body. 
  
 let 
  
 name 
  
 = 
  
 null 
 ; 
  
 try 
  
 { 
  
 name 
  
 = 
  
 event 
 . 
 data 
 . 
 message 
 . 
 json 
 . 
 name 
 ; 
  
 } 
  
 catch 
  
 ( 
 e 
 ) 
  
 { 
  
 logger 
 . 
 error 
 ( 
 "PubSub message was not JSON" 
 , 
  
 e 
 ); 
  
 } 
  

Python

  # Get the `name` attribute of the PubSub message JSON body. 
 try 
 : 
 data 
 = 
 event 
 . 
 data 
 . 
 message 
 . 
 json 
 except 
 ValueError 
 : 
 print 
 ( 
 "PubSub message was not JSON" 
 ) 
 return 
 if 
 data 
 is 
 None 
 : 
 return 
 if 
 "name" 
 not 
 in 
 data 
 : 
 print 
 ( 
 "No 'name' key" 
 ) 
 return 
 name 
 = 
 data 
 [ 
 "name" 
 ] 
  
 

Other, non-JSON payloads are contained in the Pub/Sub message as base64 encoded strings in the message object. To read a message like the following, you must decode the base64 encoded string as shown:

 gcloud pubsub topics publish topic-name --message 'MyMessage' 

Node.js

 // Decode the PubSub Message body. 
 const 
  
 message 
  
 = 
  
 event 
 . 
 data 
 . 
 message 
 ; 
 const 
  
 messageBody 
  
 = 
  
 message 
 . 
 data 
  
 ? 
  
 Buffer 
 . 
 from 
 ( 
 message 
 . 
 data 
 , 
  
 "base64" 
 ). 
 toString 
 () 
  
 : 
  
 null 
 ; 
  

Python

  # Decode the PubSub message body. 
 message_body 
 = 
 base64 
 . 
 b64decode 
 ( 
 event 
 . 
 data 
 . 
 message 
 . 
 data 
 ) 
  
 

Access message attributes

Pub/Sub message can be sent with data attributes set in the publish command. For example, you could publish a message with a name attribute:

 gcloud pubsub topics publish topic-name --attribute name=Xenia 

You can read such attributes from the corresponding property of the message object:

Node.js

 // Get the `name` attribute of the message. 
 const 
  
 name 
  
 = 
  
 event 
 . 
 data 
 . 
 message 
 . 
 attributes 
 . 
 name 
 ; 
  

Python

  # Get the `name` attribute of the message. 
 if 
 "name" 
 not 
 in 
 event 
 . 
 data 
 . 
 message 
 . 
 attributes 
 : 
 print 
 ( 
 "No 'name' attribute" 
 ) 
 return 
 name 
 = 
 event 
 . 
 data 
 . 
 message 
 . 
 attributes 
 [ 
 "name" 
 ] 
  
 
Design a Mobile Site
View Site in Mobile | Classic
Share by: