# long-running-pubsub

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

Latest version **1.0.1** (published 2018-03-10) · MIT license · 0 weekly downloads

## Install

```sh
npm install long-running-pubsub
pnpm add long-running-pubsub
yarn add long-running-pubsub
bun add long-running-pubsub
```

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 1.0.1 |
| Published | 2018-03-10 |
| First published | 2018-03-10 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 3 |
| Unpacked size | 9.7 KB |
| Known vulnerabilities | 0 (+2 in 2 direct dependencies) |
| Install scripts | no |
| GitHub stars | 7 |
| Author | Matthew Palmer |
| Maintainers | mp |
| Keywords | google, cloud, pub, sub, pubsub, long, running, job, queue, task |

## Links

- npm: https://www.npmjs.com/package/long-running-pubsub
- Repository: https://github.com/matthewpalmer/long-running-pubsub
- Homepage: https://github.com/matthewpalmer/long-running-pubsub#readme
- Issues: https://github.com/matthewpalmer/long-running-pubsub/issues
- npm.io page: https://npm.io/package/long-running-pubsub

## Dependencies (3)

- [request](https://npm.io/package/request.md) ^2.83.0
- [googleapis](https://npm.io/package/googleapis.md) ^27.0.0
- [request-promise-native](https://npm.io/package/request-promise-native.md) ^1.0.5

## Alternatives

- [cron](https://npm.io/package/cron.md) — 4.9M weekly downloads
- [@vercel/queue](https://npm.io/package/@vercel/queue.md) — 731.6K weekly downloads
- [create-sonicjs](https://npm.io/package/create-sonicjs.md) — 1.6K weekly downloads
- [@exellix/jobs-api](https://npm.io/package/@exellix/jobs-api.md) — 941 weekly downloads
- [@forwardimpact/libskill](https://npm.io/package/@forwardimpact/libskill.md) — 575 weekly downloads

## Recent versions

- 1.0.1 (latest) — 2018-03-10
- 1.0.0 — 2018-03-10

## README

# long-running-pubsub

A Node.js Google Cloud Pub/Sub client that closely mirrors [the REST API](https://cloud.google.com/pubsub/docs/reference/rest/) 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](https://github.com/googleapis/nodejs-pubsub#quickstart) to set up your project, authenticate, and enable API access.

## Usage for long running tasks

```js
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.

```js
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)
}
```

---
_Source: https://npm.io/package/long-running-pubsub · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
