UNPKG

ali-mns-sdk

Version:

The nodejs SDK for aliyun mns service

133 lines 10.2 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const events_1 = require("events"); const GA_1 = require("./GA"); const MQ_1 = require("./MQ"); const Debug_1 = require("./utils/Debug"); class NotifyRecv { constructor(mq) { this._signalSTOP = true; this._evStopped = 'AliMNS_MQ_NOTIFY_STOPPED'; // 连续timeout计数器 // 在某种未知的原因下,网络底层链接断了 // 这时在程序内部的重试无法促使网络重连,以后的重试都是徒劳的 // 如果连续发生反复重试都依然timeout,那么极有可能已经发生此种情况了 // 这时抛出NetworkBroken异常 this._timeoutCount = 0; this._timeoutMax = 128; this._ga = null; this._mq = mq; // emitter this._emitter = new events_1.EventEmitter(); // Google Analytics if (mq instanceof MQ_1.MQ) { const account = mq.getAccount(); this._ga = new GA_1.GA(account.getAccountId()); this._ga.disableGA(!account.getGA()); } } // 消息通知.每当有消息收到时,都调用cb回调函数 // 如果cb返回true,那么将删除消息,否则保留消息 notifyRecv(cb, waitSeconds, numOfMessages) { this._signalSTOP = false; this._timeoutCount = 0; this.notifyRecvInternal(cb, waitSeconds, numOfMessages); // Google Analytics if (this._ga) this._ga.send('NotifyRecv.notifyRecv', 0, ''); } // 停止消息通知 notifyStopP() { if (this._signalSTOP) return Promise.resolve(this._evStopped); // Google Analytics if (this._ga) this._ga.send('NotifyRecv.notifyStopP', 0, ''); this._signalSTOP = true; return new Promise(resolve => { this._emitter.once(this._evStopped, () => { resolve(this._evStopped); }); }); } notifyRecvInternal(cb, waitSeconds, numOfMessages) { // This signal will be triggered by notifyStopP() if (this._signalSTOP) { Debug_1.default('notifyStopped'); this._emitter.emit(this._evStopped); return; } Debug_1.default('notifyRecvInternal()'); try { const mqBatch = this._mq; mqBatch.recvP(waitSeconds, numOfMessages).then(async (dataRecv) => { try { Debug_1.default(dataRecv); this._timeoutCount = 0; if (await cb(null, dataRecv)) { this.deleteP(dataRecv).then(null, ex => { console.log(ex); }); } } catch (ex) { // ignore any ex throw from cb console.warn(ex); } this.notifyRecvInternal(cb, waitSeconds, numOfMessages); }, ex => { Debug_1.default(ex); if (!ex.Error || ex.Error.Code !== 'MessageNotExist') { cb(ex, null); } if (ex) { if (ex.message === 'timeout') { this._timeoutCount++; if (this._timeoutCount > this._timeoutMax) { // 极度可能网络底层断了 cb(new Error('NetworkBroken'), null); } } else if (ex.Error && ex.Error.Code === 'MessageNotExist') { this._timeoutCount = 0; } } process.nextTick(() => { this.notifyRecvInternal(cb, waitSeconds, numOfMessages); }); }); } catch (ex) { // ignore any ex console.warn(ex); // 过5秒重试 Debug_1.default('Retry after 5 seconds'); setTimeout(() => { this.notifyRecvInternal(cb, waitSeconds, numOfMessages); }, 5000); } } deleteP(dataRecv) { if (dataRecv) { if (dataRecv.Message) { return this._mq.deleteP(dataRecv.Message.ReceiptHandle); } else if (dataRecv.Messages && dataRecv.Messages.Message) { const rhs = []; for (const msg of dataRecv.Messages.Message) { rhs.push(msg.ReceiptHandle); } const mqBatch = this._mq; return mqBatch.deleteP(rhs); } else { return Promise.resolve(dataRecv); } } else { return Promise.resolve(dataRecv); } } } exports.NotifyRecv = NotifyRecv; //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTm90aWZ5UmVjdi5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uL3NyYy9Ob3RpZnlSZWN2LnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7O0FBQUEsbUNBQXNDO0FBQ3RDLDZCQUEwQjtBQUUxQiw2QkFBMEI7QUFDMUIseUNBQWtDO0FBRWxDLE1BQWEsVUFBVTtJQUNyQixZQUFtQixFQUFPO1FBd0hsQixnQkFBVyxHQUFHLElBQUksQ0FBQztRQUVuQixlQUFVLEdBQUcsMEJBQTBCLENBQUM7UUFHaEQsZUFBZTtRQUNmLHFCQUFxQjtRQUNyQixnQ0FBZ0M7UUFDaEMsdUNBQXVDO1FBQ3ZDLHNCQUFzQjtRQUNkLGtCQUFhLEdBQUcsQ0FBQyxDQUFDO1FBQ2xCLGdCQUFXLEdBQUcsR0FBRyxDQUFDO1FBRWxCLFFBQUcsR0FBTyxJQUFJLENBQUM7UUFwSXJCLElBQUksQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDO1FBRWQsVUFBVTtRQUNWLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxxQkFBWSxFQUFFLENBQUM7UUFFbkMsbUJBQW1CO1FBQ25CLElBQUksRUFBRSxZQUFZLE9BQUUsRUFBRTtZQUNwQixNQUFNLE9BQU8sR0FBRyxFQUFFLENBQUMsVUFBVSxFQUFFLENBQUM7WUFDaEMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLE9BQUUsQ0FBQyxPQUFPLENBQUMsWUFBWSxFQUFFLENBQUMsQ0FBQztZQUMxQyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO1NBQ3RDO0lBQ0gsQ0FBQztJQUVELDBCQUEwQjtJQUMxQiw0QkFBNEI7SUFDckIsVUFBVSxDQUFDLEVBQTZDLEVBQUUsV0FBb0IsRUFBRSxhQUFzQjtRQUMzRyxJQUFJLENBQUMsV0FBVyxHQUFHLEtBQUssQ0FBQztRQUN6QixJQUFJLENBQUMsYUFBYSxHQUFHLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztRQUN4RCxtQkFBbUI7UUFDbkIsSUFBSSxJQUFJLENBQUMsR0FBRztZQUFFLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLHVCQUF1QixFQUFFLENBQUMsRUFBRSxFQUFFLENBQUMsQ0FBQztJQUM5RCxDQUFDO0lBRUQsU0FBUztJQUNGLFdBQVc7UUFDaEIsSUFBSSxJQUFJLENBQUMsV0FBVztZQUFFLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDOUQsbUJBQW1CO1FBQ25CLElBQUksSUFBSSxDQUFDLEdBQUc7WUFBRSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyx3QkFBd0IsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFFN0QsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7UUFDeEIsT0FBTyxJQUFJLE9BQU8sQ0FBQyxPQUFPLENBQUMsRUFBRTtZQUMzQixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLEdBQUcsRUFBRTtnQkFDdkMsT0FBTyxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztZQUMzQixDQUFDLENBQUMsQ0FBQztRQUNMLENBQUMsQ0FBQyxDQUFDO0lBQ0wsQ0FBQztJQUVPLGtCQUFrQixDQUFDLEVBQTZDLEVBQUUsV0FBbUIsRUFBRSxhQUFzQjtRQUNuSCxpREFBaUQ7UUFDakQsSUFBSSxJQUFJLENBQUMsV0FBVyxFQUFFO1lBQ3BCLGVBQUssQ0FBQyxlQUFlLENBQUMsQ0FBQztZQUN2QixJQUFJLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7WUFDcEMsT0FBTztTQUNSO1FBRUQsZUFBSyxDQUFDLHNCQUFzQixDQUFDLENBQUM7UUFFOUIsSUFBSTtZQUNGLE1BQU0sT0FBTyxHQUFhLElBQUksQ0FBQyxHQUFHLENBQUM7WUFDbkMsT0FBTyxDQUFDLEtBQUssQ0FBQyxXQUFXLEVBQUUsYUFBYSxDQUFDLENBQUMsSUFBSSxDQUM1QyxLQUFLLEVBQUMsUUFBUSxFQUFDLEVBQUU7Z0JBQ2YsSUFBSTtvQkFDRixlQUFLLENBQUMsUUFBUSxDQUFDLENBQUM7b0JBQ2hCLElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxDQUFDO29CQUN2QixJQUFJLE1BQU0sRUFBRSxDQUFDLElBQUksRUFBRSxRQUFRLENBQUMsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLEVBQUUsQ0FBQyxFQUFFOzRCQUNyQyxPQUFPLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxDQUFDO3dCQUNsQixDQUFDLENBQUMsQ0FBQztxQkFDSjtpQkFDRjtnQkFBQyxPQUFPLEVBQUUsRUFBRTtvQkFDWCw4QkFBOEI7b0JBQzlCLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7aUJBQ2xCO2dCQUNELElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxFQUFFLEVBQUUsV0FBVyxFQUFFLGFBQWEsQ0FBQyxDQUFDO1lBQzFELENBQUMsRUFDRCxFQUFFLENBQUMsRUFBRTtnQkFDSCxlQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7Z0JBQ1YsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLElBQUksRUFBRSxDQUFDLEtBQUssQ0FBQyxJQUFJLEtBQUssaUJBQWlCLEVBQUU7b0JBQ3BELEVBQUUsQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLENBQUM7aUJBQ2Q7Z0JBRUQsSUFBSSxFQUFFLEVBQUU7b0JBQ04sSUFBSSxFQUFFLENBQUMsT0FBTyxLQUFLLFNBQVMsRUFBRTt3QkFDNUIsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO3dCQUNyQixJQUFJLElBQUksQ0FBQyxhQUFhLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRTs0QkFDekMsYUFBYTs0QkFDYixFQUFFLENBQUMsSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7eUJBQ3RDO3FCQUNGO3lCQUFNLElBQUksRUFBRSxDQUFDLEtBQUssSUFBSSxFQUFFLENBQUMsS0FBSyxDQUFDLElBQUksS0FBSyxpQkFBaUIsRUFBRTt3QkFDMUQsSUFBSSxDQUFDLGFBQWEsR0FBRyxDQUFDLENBQUM7cUJBQ3hCO2lCQUNGO2dCQUVELE9BQU8sQ0FBQyxRQUFRLENBQUMsR0FBRyxFQUFFO29CQUNwQixJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztnQkFDMUQsQ0FBQyxDQUFDLENBQUM7WUFDTCxDQUFDLENBQ0YsQ0FBQztTQUNIO1FBQUMsT0FBTyxFQUFFLEVBQUU7WUFDWCxnQkFBZ0I7WUFDaEIsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztZQUNqQixRQUFRO1lBQ1IsZUFBSyxDQUFDLHVCQUF1QixDQUFDLENBQUM7WUFDL0IsVUFBVSxDQUFDLEdBQUcsRUFBRTtnQkFDZCxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxFQUFFLFdBQVcsRUFBRSxhQUFhLENBQUMsQ0FBQztZQUMxRCxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUM7U0FDVjtJQUNILENBQUM7SUFFTyxPQUFPLENBQUMsUUFBYTtRQUMzQixJQUFJLFFBQVEsRUFBRTtZQUNaLElBQUksUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDcEIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2FBQ3pEO2lCQUFNLElBQUksUUFBUSxDQUFDLFFBQVEsSUFBSSxRQUFRLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRTtnQkFDekQsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDO2dCQUNmLEtBQUssTUFBTSxHQUFHLElBQUksUUFBUSxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUU7b0JBQzNDLEdBQUcsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLGFBQWEsQ0FBQyxDQUFDO2lCQUM3QjtnQkFDRCxNQUFNLE9BQU8sR0FBYSxJQUFJLENBQUMsR0FBRyxDQUFDO2dCQUNuQyxPQUFPLE9BQU8sQ0FBQyxPQUFPLENBQUMsR0FBRyxDQUFDLENBQUM7YUFDN0I7aUJBQU07Z0JBQ0wsT0FBTyxPQUFPLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO2FBQ2xDO1NBQ0Y7YUFBTTtZQUNMLE9BQU8sT0FBTyxDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztTQUNsQztJQUNILENBQUM7Q0FpQkY7QUF2SUQsZ0NBdUlDIn0=