rocketmq-client-nodejs
Version:
RocketMQ Node.js Client
193 lines • 12.1 kB
JavaScript
"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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