Cloud PubSub, A Real-Time Messaging and Event Distribution

26 Jun 2024  Amiya pattanaik  3 mins read.

Introduction:

Google Cloud Pub/Sub is a fully managed messaging service that allows you to send and receive messages between independent applications. It’s designed to provide reliable, real-time messaging for event-driven systems and analytics pipelines. Pub/Sub can scale to handle high throughput and offers low-latency message delivery.

Key Features:

  • Scalability: Automatically scales to handle millions of messages per second.
  • Reliability: Guarantees at-least-once delivery of messages.
  • Flexibility: Supports multiple message exchange patterns including one-to-many and many-to-many.
  • Integration: Easily integrates with other GCP services like BigQuery, Dataflow, and Cloud Functions.

Use Cases:

  • Log Aggregation: Collect logs from various services and centralize them for analysis.
  • Real-Time Analytics: Stream data to analytics engines for real-time processing.
  • Event-Driven Microservices: Decouple microservices by using Pub/Sub to communicate asynchronously.
  • IoT: Ingest data from IoT devices for processing and analysis.

Setting Up Cloud Pub/Sub

Prerequisites:

  • Google Cloud Project: Ensure you have a Google Cloud project set up.
  • Node.js Installed: Make sure you have Node.js and npm installed on your machine.
  • Google Cloud SDK: Install and initialize the Google Cloud SDK. Steps:
  1. Create a Pub/Sub Topic and Subscription:
    • Go to the Google Cloud Console.
    • Navigate to Pub/Sub.
    • Create a new topic.
    • Create a subscription to the topic.
  2. Set Up Authentication:
    • Create a service account and download the JSON key file.
    • Set the environment variable to point to your service account key file:
    • export GOOGLE_APPLICATION_CREDENTIALS="path/to/your-service-account-file.json"
  3. Install Pub/Sub Client Library:
    • In your Node.js project directory, install the @google-cloud/pubsub library: npm install @google-cloud/pubsub

Example: Publishing and Subscribing to Messages

Publish Messages to a Topic:

Here’s an example script to publish messages to a Pub/Sub topic using Node.JS.

// Import the Google Cloud client library
const { PubSub } = require('@google-cloud/pubsub');

// Create a PubSub client
const pubSubClient = new PubSub();

// The name of the topic
const topicName = 'YOUR_TOPIC_NAME';

// Function to publish a message
async function publishMessage() {
  const dataBuffer = Buffer.from('Hello, world!');

  try {
    const messageId = await pubSubClient.topic(topicName).publish(dataBuffer);
    console.log(`Message ${messageId} published.`);
  } catch (error) {
    console.error(`Error publishing message: ${error.message}`);
  }
}

publishMessage();

Subscribe to Messages:

Here’s an example script to receive messages from a Pub/Sub subscription using Node.js.

// Import the Google Cloud client library
const { PubSub } = require('@google-cloud/pubsub');

// Create a PubSub client
const pubSubClient = new PubSub();

// The name of the subscription
const subscriptionName = 'YOUR_SUBSCRIPTION_NAME';

// Function to listen for messages
function listenForMessages() {
  const subscription = pubSubClient.subscription(subscriptionName);

  const messageHandler = message => {
    console.log(`Received message: ${message.id}`);
    console.log(`Data: ${message.data}`);
    console.log(`Attributes: ${JSON.stringify(message.attributes)}`);

    // Acknowledge the message
    message.ack();
  };

  subscription.on('message', messageHandler);
}

listenForMessages();

Conclusion

Google Cloud Pub/Sub is a powerful service for building robust, scalable, and decoupled systems. By using Pub/Sub, you can efficiently handle real-time data streams and enable communication between distributed applications. This tutorial provided a basic overview and example of how to publish and subscribe to messages using Node.js. Explore further to leverage more advanced features like message filtering, ordering, and dead-letter policies to fit your specific use cases.

Please visit my other cloud computing related writings on this website. Enjoy your reading!

We encourage our readers to treat each other respectfully and constructively. Thank you for taking the time to read this blog post to the end. We look forward to your contributions. Let’s make something great together! What do you think? Please vote and post your comments.

Amiya Pattanaik
Amiya Pattanaik

Amiya is a Product Engineering Director focus on Product Development, Quality Engineering & User Experience. He writes his experiences here.