ali-mns-sdk
Version:
The nodejs SDK for aliyun mns service
165 lines • 13.3 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const Util = require("util");
const NotifyRecv_1 = require("./NotifyRecv");
const OpenStack_1 = require("./OpenStack");
const Region_1 = require("./Region");
const Debug_1 = require("./utils/Debug");
// The MQ
class MQ {
// The constructor. name & account is required.
// region can be "hangzhou", "beijing" or "qingdao", the default is "hangzhou"
constructor(name, account, region) {
this._notifyRecv = null;
this._recvTolerance = 5; // 接收消息的容忍时间(单位:秒)
this._region = new Region_1.Region(Region_1.City.Hangzhou);
this._pattern = '%s://%s.mns.%s.aliyuncs.com/queues/%s';
this._name = name;
this._account = account;
// region
if (region) {
if (typeof region === 'string')
this._region = new Region_1.Region(region, Region_1.NetworkType.Public, Region_1.Zone.China);
else
this._region = region;
}
// make url
this._urlAttr = this.makeAttrURL();
this._url = this.makeURL();
// create the OpenStack object
this._openStack = new OpenStack_1.OpenStack(account);
}
getName() {
return this._name;
}
getAccount() {
return this._account;
}
getRegion() {
return this._region;
}
// 获取MQ的属性值
getAttrsP() {
Debug_1.default('GET ' + this._urlAttr);
return this._openStack.sendP('GET', this._urlAttr);
}
// 设置MQ的属性值
setAttrsP(options) {
const body = { Queue: options };
Debug_1.default('PUT ' + this._urlAttr, body);
return this._openStack.sendP('PUT', this._urlAttr + '?metaoverride=true', body);
}
// 发送消息
sendP(msg, priority, delaySeconds) {
const b64 = this.utf8ToBase64(msg);
const body = { Message: { MessageBody: b64 } };
if (!isNaN(priority))
body.Message.Priority = priority;
if (!isNaN(delaySeconds))
body.Message.DelaySeconds = delaySeconds;
Debug_1.default('POST ' + this._url, body);
this._openStack.accumulateNextGASend('MQ.sendP');
return this._openStack.sendP('POST', this._url, body);
}
// 接收消息容忍时间(秒)
getRecvTolerance() {
return this._recvTolerance;
}
setRecvTolerance(value) {
this._recvTolerance = value;
}
// 接收消息
// waitSeconds, 最久等待多少秒0~30
recvP(waitSeconds) {
const _this = this;
let url = this._url;
if (waitSeconds)
url += '?waitseconds=' + waitSeconds;
Debug_1.default('GET ' + url);
return new Promise((resolve, reject) => {
// use the timeout mechanism inside the request module
const options = { timeout: _this._recvTolerance * 1000 };
if (waitSeconds)
options.timeout += waitSeconds * 1000;
_this._openStack.accumulateNextGASend('MQ.recvP');
_this._openStack.sendP('GET', url, null, null, options).then(data => {
Debug_1.default(data);
_this.decodeB64Messages(data);
resolve(data);
}, ex => {
// for compatible with 1.x, still use literal "timeout"
if (ex.code === 'ETIMEDOUT') {
const exTimeout = new Error('timeout');
exTimeout.innerException = ex;
exTimeout.code = ex.code;
reject(exTimeout);
}
else {
reject(ex);
}
});
});
}
// 检查消息
peekP() {
const _this = this;
const url = this._url + '?peekonly=true';
Debug_1.default('GET ' + url);
this._openStack.accumulateNextGASend('MQ.peekP');
return this._openStack.sendP('GET', url).then(data => {
Debug_1.default(data);
_this.decodeB64Messages(data);
return data;
});
}
// 删除消息
deleteP(receiptHandle) {
const url = this._url + '?ReceiptHandle=' + receiptHandle;
Debug_1.default('DELETE ' + url);
this._openStack.accumulateNextGASend('MQ.deleteP');
return this._openStack.sendP('DELETE', url);
}
// 保留消息
reserveP(receiptHandle, reserveSeconds) {
const url = this._url + '?ReceiptHandle=' + receiptHandle + '&VisibilityTimeout=' + reserveSeconds;
Debug_1.default('PUT ' + url);
this._openStack.accumulateNextGASend('MQ.reserveP');
return this._openStack.sendP('PUT', url);
}
// 消息通知.每当有消息收到时,都调用cb回调函数
// 如果cb返回true,那么将删除消息,否则保留消息
notifyRecv(cb, waitSeconds) {
// lazy create
if (this._notifyRecv === null)
this._notifyRecv = new NotifyRecv_1.NotifyRecv(this);
return this._notifyRecv.notifyRecv(cb, waitSeconds || 5);
}
// 停止消息通知
notifyStopP() {
if (this._notifyRecv === null)
return Promise.resolve(0);
else
return this._notifyRecv.notifyStopP();
}
utf8ToBase64(src) {
const buf = new Buffer(src, 'utf8');
return buf.toString('base64');
}
base64ToUtf8(src) {
const buf = new Buffer(src, 'base64');
return buf.toString('utf8');
}
decodeB64Messages(data) {
if (data && data.Message && data.Message.MessageBody) {
data.Message.MessageBody = this.base64ToUtf8(data.Message.MessageBody);
}
}
makeAttrURL() {
return Util.format(this._pattern, this._account.getHttps() ? 'https' : 'http', this._account.getAccountId(), this._region.toString(), this._name);
}
makeURL() {
return this.makeAttrURL() + '/messages';
}
}
exports.MQ = MQ;
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiTVEuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi9zcmMvTVEudHMiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6Ijs7QUFBQSw2QkFBNkI7QUFHN0IsNkNBQTBDO0FBQzFDLDJDQUF3QztBQUN4QyxxQ0FBMkQ7QUFDM0QseUNBQWtDO0FBRWxDLFNBQVM7QUFDVCxNQUFhLEVBQUU7SUFDYiwrQ0FBK0M7SUFDL0MsOEVBQThFO0lBQzlFLFlBQVksSUFBWSxFQUFFLE9BQWdCLEVBQUUsTUFBd0I7UUE0SzFELGdCQUFXLEdBQWdCLElBQUksQ0FBQztRQUNoQyxtQkFBYyxHQUFHLENBQUMsQ0FBQyxDQUFDLGtCQUFrQjtRQUd4QyxZQUFPLEdBQUcsSUFBSSxlQUFNLENBQUMsYUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBR3BDLGFBQVEsR0FBRyx1Q0FBdUMsQ0FBQztRQWxMekQsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7UUFDeEIsU0FBUztRQUNULElBQUksTUFBTSxFQUFFO1lBQ1YsSUFBSSxPQUFPLE1BQU0sS0FBSyxRQUFRO2dCQUFFLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxlQUFNLENBQUMsTUFBTSxFQUFFLG9CQUFXLENBQUMsTUFBTSxFQUFFLGFBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQzs7Z0JBQzdGLElBQUksQ0FBQyxPQUFPLEdBQUcsTUFBTSxDQUFDO1NBQzVCO1FBRUQsV0FBVztRQUNYLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLFdBQVcsRUFBRSxDQUFDO1FBQ25DLElBQUksQ0FBQyxJQUFJLEdBQUcsSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFDO1FBRTNCLDhCQUE4QjtRQUM5QixJQUFJLENBQUMsVUFBVSxHQUFHLElBQUkscUJBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUMzQyxDQUFDO0lBRU0sT0FBTztRQUNaLE9BQU8sSUFBSSxDQUFDLEtB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