UNPKG

mq-in-one

Version:

MQ-IN-ONE,聚合阿里云MNS、腾讯云CMQ等(http)队列服务

80 lines (70 loc) 2.6 kB
let { CMQ } = require('cmq-sdk'), MessageNotExistError = require('../error/MessageNotExist'), MessageContract = require('../class/message') class cmq { constructor(CONFIG, logger) { this.logger = logger this.CONFIG = CONFIG this.CMQClient = CMQ.NEW({ path: '/v2/index.php', signatureMethod: 'HmacSHA256', extranet: true, secretId: this.CONFIG.keyId, secretKey: this.CONFIG.keySecret, region: this.CONFIG.mqRegion }) } receiveMessage (pollingWaitSeconds = 5) { return this.CMQClient.receiveMessage({ queueName: this.CONFIG.queueName, pollingWaitSeconds }).then((message) => { if (message.code === 7000 || message.message.indexOf('no message') !== -1) { return Promise.reject(new MessageNotExistError({ requestId: message.requestId })) } return new MessageContract(message.msgBody, message.receiptHandle, { dequeueCount: message.dequeueCount, messageId: message.msgId, enqueueTime: new Date(message.enqueueTime * 1000), nextVisibleTime: new Date(message.nextVisibleTime * 100), firstDequeueTime: new Date(message.firstDequeueTime * 100), mqType: cmq.mqType }, message) }).catch(error => { if (error.code === 'ETIMEDOUT') { return Promise.reject(new MessageNotExistError()) } return Promise.reject(error) }) } pushMessage (content, options = {}) { return this.CMQClient.sendMessage({ queueName: this.CONFIG.queueName, msgBody: content, delaySeconds: options.delaySeconds || cmq.DEFAULT_OPTIONS.delaySeconds }).then((result) => { return new MessageContract(content, null, { messageId: result.msgId, mqType: cmq.mqType }, result) }) } consumeMessage (message) { return this.CMQClient.deleteMessage({ queueName: this.CONFIG.queueName, receiptHandle: message.getHandler() }) .then(result => { return result.code === 0 }) } } cmq.DEFAULT_OPTIONS = { delaySeconds: 0 } cmq.mqType = 'cmq' module.exports = cmq