UNPKG

rocketmq-client-nodejs

Version:
94 lines 7.56 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.LiteFifoConsumeService = void 0; const ConsumeResult_1 = require("./ConsumeResult"); const FifoConsumeService_1 = require("./FifoConsumeService"); const Logger_1 = require("../client/Logger"); /** * FIFO consume service for lite push consumer. * * <p>Similar to {@link FifoConsumeService}, but groups messages by lite topic * instead of message group. This ensures messages with the same lite topic are * consumed sequentially, while messages with different lite topics can be * consumed in parallel when the accelerator is enabled.</p> * * <p>When the message listener returns {@link ConsumeResultSuspend}, all * remaining messages with the same lite topic in the current batch are also * suspended, while messages with different lite topics continue to be consumed.</p> */ class LiteFifoConsumeService extends FifoConsumeService_1.FifoConsumeService { #logger; constructor(clientId, messageListener, enableFifoConsumeAccelerator) { super(clientId, messageListener, enableFifoConsumeAccelerator); this.#logger = (0, Logger_1.getDefaultLogger)(); } /** * Use lite topic as the group key for FIFO consumption. * * @param messageView - The message view * @return {string} The lite topic, empty string if not present */ getMessageGroupKey(messageView) { return messageView.liteTopic || ''; } consumeIteratively(pq, messageViews, startIndex) { if (!pq || !messageViews) { this.#logger.error('[Bug] Invalid arguments for consumeIteratively, pq=%s, messageViews=%s, clientId=%s', pq, messageViews, this.clientId); return Promise.resolve(); } const next = this.getNextValidMessage(pq, messageViews, startIndex); if (!next) { return Promise.resolve(); } const { messageView, nextIndex } = next; return this.consumeMessage(messageView) .then(async (result) => { await pq.eraseFifoMessage(messageView, result); return result; }) .then(async (result) => { if (result instanceof ConsumeResult_1.ConsumeResultSuspend) { const currentLiteTopic = messageView.liteTopic ?? ''; const continuation = []; const suspendTasks = []; // Suspend all messages with the same liteTopic in this batch. for (let i = nextIndex; i < messageViews.length; i++) { const msg = messageViews[i]; if ((msg.liteTopic ?? '') === currentLiteTopic) { suspendTasks.push(pq.eraseFifoMessage(msg, result)); } else { continuation.push(msg); } } this.#logger.debug?.('LiteFifoConsumeService suspend, liteTopic=%s, suspendCount=%d, continuationCount=%d, ' + 'clientId=%s', currentLiteTopic, suspendTasks.length, continuation.length, this.clientId); await Promise.all(suspendTasks); return this.consumeIteratively(pq, continuation, 0); } return this.consumeIteratively(pq, messageViews, nextIndex); }) .catch(err => { this.#logger.error('[Bug] Exception raised in lite FIFO consumption callback, clientId=%s, error=%s', this.clientId, err); return this.consumeIteratively(pq, messageViews, nextIndex); }); } } exports.LiteFifoConsumeService = LiteFifoConsumeService; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTGl0ZUZpZm9Db25zdW1lU2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uL3NyYy9jb25zdW1lci9MaXRlRmlmb0NvbnN1bWVTZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQTs7Ozs7Ozs7Ozs7Ozs7O0dBZUc7OztBQUdILG1EQUF1RDtBQUN2RCw2REFBMEQ7QUFHMUQsNkNBQTZEO0FBRTdEOzs7Ozs7Ozs7OztHQVdHO0FBQ0gsTUFBYSxzQkFBdUIsU0FBUSx1Q0FBa0I7SUFDbkQsT0FBTyxDQUFVO0lBRTFCLFlBQVksUUFBZ0IsRUFBRSxlQUFnQyxFQUFFLDRCQUFzQztRQUNwRyxLQUFLLENBQUMsUUFBUSxFQUFFLGVBQWUsRUFBRSw0QkFBNEIsQ0FBQyxDQUFDO1FBQy9ELElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBQSx5QkFBZ0IsR0FBRSxDQUFDO0lBQ3BDLENBQUM7SUFFRDs7Ozs7T0FLRztJQUNPLGtCQUFrQixDQUFDLFdBQXdCO1FBQ25ELE9BQU8sV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7SUFDckMsQ0FBQztJQUVTLGtCQUFrQixDQUFDLEVBQWdCLEVBQUUsWUFBMkIsRUFBRSxVQUFrQjtRQUM1RixJQUFJLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLENBQUM7WUFDekIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxLQUFLLENBQUMscUZBQXFGLEVBQ3RHLEVBQUUsRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1lBQ25DLE9BQU8sT0FBTyxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBQzNCLENBQUM7UUFFRCxNQUFNLElBQUksR0FBRyxJQUFJLENBQUMsbUJBQW1CLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxVQUFVLENBQUMsQ0FBQztRQUNwRSxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7WUFDVixPQUFPLE9BQU8sQ0FBQyxPQUFPLEVBQUUsQ0FBQztRQUMzQixDQUFDO1FBQ0QsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsR0FBRyxJQUFJLENBQUM7UUFFeEMsT0FBTyxJQUFJLENBQUMsY0FBYyxDQUFDLFdBQVcsQ0FBQzthQUNwQyxJQUFJLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ25CLE1BQU0sRUFBRSxDQUFDLGdCQUFnQixDQUFDLFdBQVcsRUFBRSxNQUFNLENBQUMsQ0FBQztZQUMvQyxPQUFPLE1BQU0sQ0FBQztRQUNoQixDQUFDLENBQUM7YUFDRCxJQUFJLENBQUMsS0FBSyxFQUFDLE1BQU0sRUFBQyxFQUFFO1lBQ25CLElBQUksTUFBTSxZQUFZLG9DQUFvQixFQUFFLENBQUM7Z0JBQzNDLE1BQU0sZ0JBQWdCLEdBQUcsV0FBVyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUM7Z0JBQ3JELE1BQU0sWUFBWSxHQUFrQixFQUFFLENBQUM7Z0JBQ3ZDLE1BQU0sWUFBWSxHQUF5QixFQUFFLENBQUM7Z0JBRTlDLDhEQUE4RDtnQkFDOUQsS0FBSyxJQUFJLENBQUMsR0FBRyxTQUFTLEVBQUUsQ0FBQyxHQUFHLFlBQVksQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUUsQ0FBQztvQkFDckQsTUFBTSxHQUFHLEdBQUcsWUFBWSxDQUFDLENBQUMsQ0FBQyxDQUFDO29CQUM1QixJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsSUFBSSxFQUFFLENBQUMsS0FBSyxnQkFBZ0IsRUFBRSxDQUFDO3dCQUMvQyxZQUFZLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQztvQkFDdEQsQ0FBQzt5QkFBTSxDQUFDO3dCQUNOLFlBQVksQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7b0JBQ3pCLENBQUM7Z0JBQ0gsQ0FBQztnQkFFRCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssRUFBRSxDQUFDLHVGQUF1RjtzQkFDeEcsYUFBYSxFQUFFLGdCQUFnQixFQUFFLFlBQVksQ0FBQyxNQUFNLEVBQUUsWUFBWSxDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7Z0JBRTlGLE1BQU0sT0FBTyxDQUFDLEdBQUcsQ0FBQyxZQUFZLENBQUMsQ0FBQztnQkFDaEMsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN0RCxDQUFDO1lBQ0QsT0FBTyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFlBQVksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUM5RCxDQUFDLENBQUM7YUFDRCxLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUU7WUFDWCxJQUFJLENBQUMsT0FBTyxDQUFDLEtBQUssQ0FBQyxpRkFBaUYsRUFDbEcsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLENBQUMsQ0FBQztZQUN0QixPQUFPLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsWUFBWSxFQUFFLFNBQVMsQ0FBQyxDQUFDO1FBQzlELENBQUMsQ0FBQyxDQUFDO0lBQ1AsQ0FBQztDQUNGO0FBbEVELHdEQWtFQyJ9