UNPKG

bmqb-mq

Version:
141 lines (124 loc) 4.15 kB
'use strict'; Object.defineProperty(exports, "__esModule", { value: true }); var _aliMns = require('ali-mns'); var _jsonpack = require('jsonpack'); var _jsonpack2 = _interopRequireDefault(_jsonpack); var _mq_msg = require('../../mq_msg'); var _mq_msg2 = _interopRequireDefault(_mq_msg); function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } class MNSAdapter { constructor(_ref) { let accountId = _ref.accountId; let accessKey = _ref.accessKey; let secretKey = _ref.secretKey; let queueName = _ref.queueName; var _ref$region = _ref.region; let region = _ref$region === undefined ? 'hangzhou' : _ref$region; if (!accessKey || !secretKey || !accountId) { throw new Error('invalid arguments'); } if (!queueName) { throw new Error('invalid queueName'); } this.config = { accountId: accountId, accessKey: accessKey, secretKey: secretKey, queueName: queueName, region: region }; } getAccount() { if (this.account) { return this.account; } this.account = new _aliMns.Account(this.config.accountId, this.config.accessKey, this.config.secretKey); return this.account; } getQueueHandler() { if (this.queueHandler) { return this.queueHandler; } this.queueHandler = new _aliMns.MQ(this.config.queueName, this.getAccount(), this.config.region); return this.queueHandler; } /** * @params msg {MQMsg} 支持字符串、json格式 * @params delay {Integer} 延迟时间(不得大于7天,单位s) * @params priority {String} 优先级 0-16,默认为8 */ pushMsg(msg) { return Promise.resolve().then(() => { if (!(msg instanceof _mq_msg2.default)) { throw new Error('msg must be a MQMsg Object!'); } return this.getQueueHandler().sendP(_jsonpack2.default.pack(msg.getMsg()), msg.getPriority(), msg.getDelay()).then(message => { msg.setId(message.Message.MessageId); return msg; }); }); } popMsg(callback) { return this.getQueueHandler().notifyRecv((err, message) => { if (err) { callback(err); } else { let msgMeta = ''; if (message && 'Message' in message) { try { msgMeta = message.Message.MessageBody; msgMeta = _jsonpack2.default.unpack(msgMeta); // 设置msg const msg = new _mq_msg2.default(msgMeta); msg.setId(message.Message.MessageId); msg.setRawMsg(message.Message); msg.setEnqueueTime(message.Message.EnqueueTime); msg.setNextVisibleTime(message.Message.NextVisibleTime); callback(null, msg); } catch (error) { callback(error); } } } }, 1); // 没有消息时每秒轮询一次 } /** * @params msg {MQMsg} */ deleteMsg(msg) { return Promise.resolve().then(() => { if (!msg || !(msg instanceof _mq_msg2.default)) { throw new Error('msg must be a MQMsg Object!'); } const rawMsg = msg.getRawMsg(); if (!rawMsg.ReceiptHandle) { throw new Error('The msg object have no attribute about ReceiptHandle'); } return this.getQueueHandler().deleteP(rawMsg.ReceiptHandle); }); } /** * 设置消息可见性 * @param {MQMsg} msg - 消息 * @param {number} seconds - 消息可见秒数 */ setMsgVisibility(msg) { let seconds = arguments.length <= 1 || arguments[1] === undefined ? 1 : arguments[1]; return Promise.resolve().then(() => { if (!msg || !(msg instanceof _mq_msg2.default)) { throw new Error('msg must be a MQMsg Object!'); } if (!(seconds >= 1 && seconds <= 43200)) { throw new Error('msg visibility seconds must between 1 and 43200!'); } const rawMsg = msg.getRawMsg(); if (!rawMsg.ReceiptHandle) { throw new Error('The msg object have no attribute about ReceiptHandle'); } return this.getQueueHandler().reserveP(rawMsg.ReceiptHandle, seconds); }); } } exports.default = MNSAdapter;