rocketmq-client-nodejs
Version:
RocketMQ Node.js Client
139 lines • 12.6 kB
JavaScript
;
/**
* 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.Consumer = void 0;
const service_pb_1 = require("../../proto/apache/rocketmq/v2/service_pb");
const definition_pb_1 = require("../../proto/apache/rocketmq/v2/definition_pb");
const message_1 = require("../message");
const exception_1 = require("../exception");
const client_1 = require("../client");
const util_1 = require("../util");
class Consumer extends client_1.BaseClient {
consumerGroup;
constructor(options) {
super(options);
this.consumerGroup = options.consumerGroup;
}
wrapReceiveMessageRequest(batchSize, mq, filterExpression, invisibleDuration, longPollingTimeout) {
return new service_pb_1.ReceiveMessageRequest()
.setGroup((0, util_1.createResource)(this.consumerGroup))
.setMessageQueue(mq.toProtobuf())
.setFilterExpression(filterExpression.toProtobuf())
.setLongPollingTimeout((0, util_1.createDuration)(longPollingTimeout))
.setBatchSize(batchSize)
.setAutoRenew(false)
.setInvisibleDuration((0, util_1.createDuration)(invisibleDuration));
}
async receiveMessage(request, mq, awaitDuration) {
const endpoints = mq.broker.endpoints;
const timeout = this.requestTimeout + awaitDuration;
let status;
try {
this.logger.debug?.('Receiving messages from broker, topic=%s, endpoints=%s, batchSize=%d, clientId=%s', request.getMessageQueue()?.getTopic()?.getName(), endpoints, request.getBatchSize(), this.clientId);
const responses = await this.rpcClientManager.receiveMessage(endpoints, request, timeout);
const messageList = [];
let transportDeliveryTimestamp;
for (const response of responses) {
switch (response.getContentCase()) {
case service_pb_1.ReceiveMessageResponse.ContentCase.STATUS:
status = response.getStatus()?.toObject();
break;
case service_pb_1.ReceiveMessageResponse.ContentCase.MESSAGE:
messageList.push(response.getMessage());
break;
case service_pb_1.ReceiveMessageResponse.ContentCase.DELIVERY_TIMESTAMP:
transportDeliveryTimestamp = response.getDeliveryTimestamp()?.toDate();
break;
default:
// this.logger.warn("[Bug] Not recognized content for receive message response, mq={}, " +
// "clientId={}, response={}", mq, clientId, response);
}
}
exception_1.StatusChecker.check(status);
if (messageList.length > 0) {
this.logger.debug?.('Received %d messages successfully, topic=%s, endpoints=%s, clientId=%s', messageList.length, request.getMessageQueue()?.getTopic()?.getName(), endpoints, this.clientId);
}
const messages = messageList.map(message => new message_1.MessageView(message, mq, transportDeliveryTimestamp));
return messages;
}
catch (err) {
this.logger.error('Failed to receive messages, topic=%s, endpoints=%s, clientId=%s, error=%s', request.getMessageQueue()?.getTopic()?.getName(), endpoints, this.clientId, err);
throw err;
}
}
async ackMessage(messageView) {
const endpoints = messageView.endpoints;
const request = new service_pb_1.AckMessageRequest()
.setGroup((0, util_1.createResource)(this.consumerGroup))
.setTopic((0, util_1.createResource)(messageView.topic));
request.addEntries()
.setMessageId(messageView.messageId)
.setReceiptHandle(messageView.receiptHandle);
const res = await this.rpcClientManager.ackMessage(endpoints, request, this.requestTimeout);
// FIXME: handle fail ack
const response = res.toObject();
exception_1.StatusChecker.check(response.status);
return response.entriesList;
}
async invisibleDuration(messageView, invisibleDuration) {
const request = new service_pb_1.ChangeInvisibleDurationRequest()
.setGroup((0, util_1.createResource)(this.consumerGroup))
.setTopic((0, util_1.createResource)(messageView.topic))
.setReceiptHandle(messageView.receiptHandle)
.setInvisibleDuration((0, util_1.createDuration)(invisibleDuration))
.setMessageId(messageView.messageId);
const res = await this.rpcClientManager.changeInvisibleDuration(messageView.endpoints, request, this.requestTimeout);
const response = res.toObject();
exception_1.StatusChecker.check(response.status);
return response.receiptHandle;
}
/**
* Expose public methods for ProcessQueue to access RPC operations
*/
async ackMessageViaRpc(endpoints, request, timeout) {
const res = await this.rpcClientManager.ackMessage(endpoints, request, timeout);
return res;
}
async changeInvisibleDurationViaRpc(endpoints, request, timeout) {
const res = await this.rpcClientManager.changeInvisibleDuration(endpoints, request, timeout);
return res;
}
async forwardMessageToDeadLetterQueueViaRpc(endpoints, request, timeout) {
const res = await this.rpcClientManager.forwardMessageToDeadLetterQueue(endpoints, request, timeout);
return res;
}
/**
* Get the consumer group name.
*
* @return Consumer group name
*/
getConsumerGroup() {
return this.consumerGroup;
}
/**
* Check if this is a lite consumer.
*
* @return true if this is a LITE_PUSH_CONSUMER
*/
isLiteConsumer() {
const clientType = this.getClientType?.();
return clientType === definition_pb_1.ClientType.LITE_PUSH_CONSUMER;
}
}
exports.Consumer = Consumer;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiQ29uc3VtZXIuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi9zcmMvY29uc3VtZXIvQ29uc3VtZXIudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBOzs7Ozs7Ozs7Ozs7Ozs7R0FlRzs7O0FBR0gsMEVBSW1EO0FBQ25ELGdGQUEwRTtBQUMxRSx3Q0FBeUM7QUFFekMsNENBQTZDO0FBQzdDLHNDQUEwRDtBQUMxRCxrQ0FBeUQ7QUFPekQsTUFBc0IsUUFBUyxTQUFRLG1CQUFVO0lBQzVCLGFBQWEsQ0FBUztJQUV6QyxZQUFZLE9BQXdCO1FBQ2xDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxhQUFhLEdBQUcsT0FBTyxDQUFDLGFBQWEsQ0FBQztJQUM3QyxDQUFDO0lBRVMseUJBQXlCLENBQUMsU0FBaUIsRUFBRSxFQUFnQixFQUNyRSxnQkFBa0MsRUFBRSxpQkFBeUIsRUFBRSxrQkFBMEI7UUFDekYsT0FBTyxJQUFJLGtDQUFxQixFQUFFO2FBQy9CLFFBQVEsQ0FBQyxJQUFBLHFCQUFjLEVBQUMsSUFBSSxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQzVDLGVBQWUsQ0FBQyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDaEMsbUJBQW1CLENBQUMsZ0JBQWdCLENBQUMsVUFBVSxFQUFFLENBQUM7YUFDbEQscUJBQXFCLENBQUMsSUFBQSxxQkFBYyxFQUFDLGtCQUFrQixDQUFDLENBQUM7YUFDekQsWUFBWSxDQUFDLFNBQVMsQ0FBQzthQUN2QixZQUFZLENBQUMsS0FBSyxDQUFDO2FBQ25CLG9CQUFvQixDQUFDLElBQUEscUJBQWMsRUFBQyxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7SUFDN0QsQ0FBQztJQUVTLEtBQUssQ0FBQyxjQUFjLENBQUMsT0FBOEIsRUFBRSxFQUFnQixFQUFFLGFBQXFCO1FBQ3BHLE1BQU0sU0FBUyxHQUFHLEVBQUUsQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDO1FBQ3RDLE1BQU0sT0FB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