UNPKG

rocketmq-client-nodejs

Version:
193 lines 12.1 kB
"use strict"; /** * Licensed to the Apache Software Foundation (ASF) under one or more * contributor license agreements. See the NOTICE file distributed with * this work for additional information regarding copyright ownership. * The ASF licenses this file to You 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. */ Object.defineProperty(exports, "__esModule", { value: true }); exports.LitePushConsumerBuilder = void 0; const LitePushConsumerImpl_1 = require("./LitePushConsumerImpl"); const CONSUMER_GROUP_PATTERN = /^[a-zA-Z0-9_-]+$/; /** * LitePushConsumer builder class. * * <p>This class provides a fluent API for configuring and creating * lite push consumers with reduced overhead for lightweight scenarios.</p> */ class LitePushConsumerBuilder { options = {}; /** * Set the bind topic for the lite push consumer. * * @param bindTopic - The parent topic to bind * @return This builder instance * @throws Error if bindTopic is blank */ bindTopic(bindTopic) { if (!bindTopic || bindTopic.trim().length === 0) { throw new Error('bindTopic should not be blank'); } this.options.bindTopic = bindTopic; return this; } /** * Set the client configuration. * * @param options - Client configuration options * @return This builder instance * @throws Error if options is null/undefined */ setClientConfiguration(options) { if (!options) { throw new Error('clientConfiguration should not be null'); } Object.assign(this.options, options); return this; } /** * Set the consumer group. * * @param consumerGroup - Consumer group name * @return This builder instance * @throws Error if consumerGroup is null, doesn't match the pattern, or starts with 'GID-' */ setConsumerGroup(consumerGroup) { if (!consumerGroup) { throw new Error('consumerGroup should not be null'); } if (!CONSUMER_GROUP_PATTERN.test(consumerGroup)) { throw new Error(`consumerGroup does not match the pattern ${CONSUMER_GROUP_PATTERN.source}`); } this.options.consumerGroup = consumerGroup; return this; } /** * Set the message listener. * * @param messageListener - Message listener implementation * @return This builder instance * @throws Error if messageListener is null/undefined */ setMessageListener(messageListener) { if (!messageListener) { throw new Error('messageListener should not be null'); } this.options.messageListener = messageListener; return this; } /** * Set the maximum cache message count. * * @param maxCacheMessageCount - Maximum number of messages to cache * @return This builder instance * @throws Error if maxCacheMessageCount is not positive */ setMaxCacheMessageCount(maxCacheMessageCount) { if (maxCacheMessageCount <= 0) { throw new Error('maxCacheMessageCount should be positive'); } this.options.maxCacheMessageCount = maxCacheMessageCount; return this; } /** * Set the maximum cache message size in bytes. * * @param maxCacheMessageSizeInBytes - Maximum cache size in bytes * @return This builder instance * @throws Error if maxCacheMessageSizeInBytes is not positive */ setMaxCacheMessageSizeInBytes(maxCacheMessageSizeInBytes) { if (maxCacheMessageSizeInBytes <= 0) { throw new Error('maxCacheMessageSizeInBytes should be positive'); } this.options.maxCacheMessageSizeInBytes = maxCacheMessageSizeInBytes; return this; } /** * Set the consumption thread count. * * @param consumptionThreadCount - Number of threads for consumption * @return This builder instance * @throws Error if consumptionThreadCount is not positive */ setConsumptionThreadCount(consumptionThreadCount) { if (consumptionThreadCount <= 0) { throw new Error('consumptionThreadCount should be positive'); } // Note: Node.js uses a single-threaded event loop model, so this configuration // has no effect on actual consumption concurrency. It is retained solely for // API compatibility with the other clients. Consumption concurrency in Node.js // is naturally managed by the event loop and Promise-based async scheduling. this.options.consumptionThreadCount = consumptionThreadCount; return this; } /** * Set enable fifo consume accelerator. * * <p>If enabled, messages with different messageGroups are consumed in parallel * while messages within the same messageGroup are consumed sequentially.</p> * * @param enableFifoConsumeAccelerator - Whether to enable FIFO consume accelerator * @return This builder instance */ setEnableFifoConsumeAccelerator(enableFifoConsumeAccelerator) { this.options.enableFifoConsumeAccelerator = enableFifoConsumeAccelerator; return this; } /** * Finalize the build of LitePushConsumer and start. * * <p>This method will block until the push consumer starts successfully. * * <p>Especially, if this method is invoked more than once, different push consumers will be created and started. * * @return Promise resolving to started LitePushConsumer instance * @throws Error if required parameters are not set */ async build() { if (!this.options.endpoints) { throw new Error('clientConfiguration has not been set yet'); } if (!this.options.consumerGroup) { throw new Error('consumerGroup has not been set yet'); } if (!this.options.messageListener) { throw new Error('messageListener has not been set yet'); } if (!this.options.bindTopic) { throw new Error('bindTopic has not been set yet'); } // Build LitePushConsumerImpl const options = { endpoints: this.options.endpoints, namespace: this.options.namespace ?? '', consumerGroup: this.options.consumerGroup, bindTopic: this.options.bindTopic, messageListener: this.options.messageListener, sslEnabled: this.options.sslEnabled, sessionCredentials: this.options.sessionCredentials, requestTimeout: this.options.requestTimeout, logger: this.options.logger, maxCacheMessageCount: this.options.maxCacheMessageCount, maxCacheMessageSizeInBytes: this.options.maxCacheMessageSizeInBytes, consumptionThreadCount: this.options.consumptionThreadCount, enableFifoConsumeAccelerator: this.options.enableFifoConsumeAccelerator, }; const litePushConsumer = new LitePushConsumerImpl_1.LitePushConsumerImpl(options); await litePushConsumer.startup(); return litePushConsumer; } } exports.LitePushConsumerBuilder = LitePushConsumerBuilder; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGl0ZVB1c2hDb25zdW1lci5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdW1lci9MaXRlUHVzaENvbnN1bWVyLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUtILGlFQUE4RDtBQStFOUQsTUFBTSxzQkFBc0IsR0FBRyxrQkFBa0IsQ0FBQztBQUVsRDs7Ozs7R0FLRztBQUNILE1BQWEsdUJBQXVCO0lBQzFCLE9BQU8sR0FBcUMsRUFBRSxDQUFDO0lBRXZEOzs7Ozs7T0FNRztJQUNILFNBQVMsQ0FBQyxTQUFpQjtRQUN6QixJQUFJLENBQUMsU0FBUyxJQUFJLFNBQVMsQ0FBQyxJQUFJLEVBQUUsQ0FBQyxNQUFNLEtBQUssQ0FBQyxFQUFFLENBQUM7WUFDaEQsTUFBTSxJQUFJLEtBQUssQ0FBQywrQkFBK0IsQ0FBQyxDQUFDO1FBQ25ELENBQUM7UUFDRCxJQUFJLENBQUMsT0FBTyxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDbkMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsc0JBQXNCLENBQUMsT0FBMEI7UUFDL0MsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1lBQ2IsTUFBTSxJQUFJLEtBQUssQ0FBQyx3Q0FBd0MsQ0FBQyxDQUFDO1FBQzVELENBQUM7UUFDRCxNQUFNLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxPQUFPLEVBQUUsT0FBTyxDQUFDLENBQUM7UUFDckMsT0FBTyxJQUFJLENBQUM7SUFDZCxDQUFDO0lBRUQ7Ozs7OztPQU1HO0lBQ0gsZ0JBQWdCLENBQUMsYUFBcUI7UUFDcEMsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1lBQ25CLE1BQU0sSUFBSSxLQUFLLENBQUMsa0NBQWtDLENBQUMsQ0FBQztRQUN0RCxDQUFDO1FBQ0QsSUFBSSxDQUFDLHNCQUFzQixDQUFDLElBQUksQ0FBQyxhQUFhLENBQUMsRUFBRSxD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