@zaplify/gcp-pubsub
Version:
Cloud Pub/Sub Client Library for Node.js
96 lines (95 loc) • 3.55 kB
TypeScript
/*!
* Copyright 2021 Google LLC
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
import { Publisher } from '.';
import { PubsubMessage } from './pubsub-message';
/**
* Encapsulates a series of message publishes from a rapid loop (or similar
* circumstance).
*
* This class is not meant to be instantiated outside of the `@google-cloud/pubsub`
* package. It is returned from {@link Topic#flowControlled}. Messages sent
* through an instance of this class will obey publisher flow control
* settings set through {@link PublisherOptions} on {@link Topic}, across
* all instances returned by {@link Topic#flowControlled} on that {@link Topic}.
*/
export declare class FlowControlledPublisher {
private publisher;
private flowControl;
private idPromises;
constructor(publisher: Publisher);
/**
* Returns true if sending the specified Buffer would result in exceeding the
* limits of the flow control settings.
*
* @param {PubsubMessage} message The data buffer with the message's contents.
* @returns {boolean} True if the message would exceed flow control limits.
*/
wouldExceed(message: PubsubMessage): boolean;
/**
* Publishes a message, subject to flow control restrictions.
*
* If the message can be sent immediately, this will return `null`. Otherwise,
* it will return a Promise<void> that resolves after it's okay to resume
* calling the method.
*
* @param {Buffer} [data] The message contents to be sent.
* @param {Attributes} [attributes] Optional attributes.
* @returns null, or a Promise that resolves when sending may resume.
*
* @example
* ```
* const wait = flowControlled.publish({data});
* if (wait) {
* await wait;
* }
*
* ```
* @example
* ```
* // It's okay to await unconditionally, it's equivalent to nextTick().
* await flowControlled.publish(data);
* ```
*/
publish(message: PubsubMessage): Promise<void> | null;
/**
* Publishes a message unconditionally, updating flow control counters.
*
* You'll generally only want to use this if you want to deal with timing the
* flow control yourself, but you'd like the library to do the bean counting.
*
* @param {Buffer} [data] The message contents to be sent.
* @param {Attributes} [attributes] Optional attributes.
*
* @example
* ```
* if (!flowControlled.wouldExceed(data)) {
* flowControlled.publishNow(data);
* }
* ```
*/
publishNow(message: PubsubMessage): void;
private doPublish;
/**
* Returns a Promise that will resolve to all of the currently sent
* message IDs (or reject if there is an error). This also clears
* out any currently sent messages, so the next call to `all()` will
* be a clean slate.
*
* @returns {Promise<string[]>} A Promise that resolves when all current
* messages are sent.
*/
all(): Promise<string[]>;
}