Skip to content

A Google Cloud Pub/Sub client with better support for long running tasks.

License

Notifications You must be signed in to change notification settings

matthewpalmer/long-running-pubsub

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

6 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

long-running-pubsub

A Node.js Google Cloud Pub/Sub client that closely mirrors the REST API with added support for long running tasks and jobs.

  • Manual control over pull and publish
  • Manual support for controlling a message's ackDeadline
  • Automatic support for long-running job management

Quick Start

To get started, follow the the usual Google Cloud API procedure to set up your project, authenticate, and enable API access.

Usage for long running tasks

const PubSub = require('long-running-pubsub');

const client = new PubSub({
  project: PROJECT_ID,
  // Optionally provide a logging function for debugging
  // log: console.log
});

// Get messages corresponding to a long running job that you're going to start
const job = client.pullLongRunningJob(SUBSCRIPTION, {
  // How long to defer the ackDeadline
  extendBy: 15000,
  // How often to do this deferring
  withPeriod: 10000
});

job.then(payload => {
  if (!payload) {
    console.log(`There are no messages on the queue.`);
    return;
  }

  // Simulate a long running job that takes two minutes
  console.log(`Starting a long running job...`);

  setTimeout(() => {
    // The job's done. The library managed the ackDeadline during this time
    // to reduce duplicate notifications (though they  can't be 100% eliminated)
    console.log(`Job done.`);

    // Acknowledge the job is finished
    client.acknowledgeLongRunningJob(SUBSCRIPTION, payload.ackId)
      .then(() => {
        console.log(`Job status acknowledged`);
      })
  }, 120000);
})

Usage with the REST API

This client exposes an interface that closely resembles the REST API so that you have fine-grained manual control over pull, publish, and acknowledgement deadline management.

class Client {
  // Subscriber
  acknowledge(subscription, ackIds)
  modifyAckDeadline(subscription, ackIds, ackDeadline)
  pull(subscription, { returnImmediately = true, maxMessages = 1 } = {})

  // Long running tasks
  pullLongRunningJob(subscription, { extendBy = 10000, withPeriod = 10000 } = {})
  acknowledgeLongRunningJob(subscription, ackId)

  // Publisher
  publish(topic, messages)
}

About

A Google Cloud Pub/Sub client with better support for long running tasks.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published