UNPKG

mq-in-one

Version:

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

183 lines (134 loc) 5.64 kB
<span align="center"> # MQ-In-One </span> MQ-IN-ONE,旨在聚合各家云平台(阿里云MNS、腾讯云CMQ等)的队列服务, 以使用相似的API来调用各家云平台的队列,使得切换不同云平台服务的时候 仅需要更改配置文件而不需要更改代码结构。 ### 现已支持 - 腾讯云CMQ: 基于 [kainonly/cmq-node-sdk](https://github.com/kainonly/cmq-node-sdk) 实现 - 阿里云MNS: 基于 [InCar/ali-mns](https://github.com/InCar/ali-mns) 实现 感谢以上库作者的贡献 ### 安装 ```shell npm install mq-in-one ``` ### Quick Start ```javascript let MQInOne = require('mq-in-one') let mq = new MQInOne({ // 不同厂商的MQ需要的配置不同,请查看各MQ的[配置项] accountId: '<accountId>', keyId: '<keyId>', keySecret: '<keySecret>', queueName: '<queueName>', mqRegion: '<mqRegion>', }, '<mqType>') ``` 不同厂商的MQ需要的配置不同,请查看各MQ的[配置项](#配置项) #### 获取消息 ```javascript mq.receiveMessage().then(message => { console.log('Message content:', message.getContent()) }) ``` #### 添加消息 ```javascript mq.pushMessage('I am content', { delaySeconds: 2 // 延迟2秒后可见 }).then(result => { console.log('Sent message:', result) }) ``` #### 轮询消息 ```javascript mq.pollingMessage(30, (err, message) => { if (err) { console.error('Error occurred:', err) } else { console.log('Received message', message) } }) ``` ### API Reference - `MQIneOne` - `constructor` * `config` MQ配置项,不同厂商的MQ需要的配置不同,请查看各MQ的[配置项](#配置项) * `mqType` 队列类型。现在支持: 阿里云MNS: `mns`, 腾讯云CMQ `cmq` * `logger` log4js的logger实例 - `pushMessage`: Promise\<MessageContract\> 向队列添加消息 * `content`: `String` - 消息内容 * `options`: `Object` - 消息更多设置项 * `delaySeconds` - 需要延时多久该消息才可见(单位:秒) Supported: `mns`, `cmq` * `priority` - 消息优先级 Supported: `mns` - `receiveMessage`: Promise\<MessageContract\> 接收队列中的消息 * `pollingWaitSeconds`: `Number` - 请求的长轮询等待时间(单位:秒) Supported: `mns`, `cmq` - `consumeMessage`: Promise\<Boolean\> 消费(删除)消息 * `message`: `MessageContract` - 要删除的信息 - `pollingMessage` 不断轮询队列,若获取到新消息,则调用传入的handler函数 * handler: `function` * `err` - 轮询错误 * `message`: `MessageContract` - 获取到的消息 * `callback`: `function` - optional 如果 `waitForCallback``true` 则会通过 `callback` 参数 传入回调函数,且队列会等待回调后再继续轮询 * `waitForCallback`: `Boolean` 获取到消息后是否等待回调函数再继续轮询 - `MessageContract` - `constructor` * `content` - 消息内容 * `handler` - 消息的句柄(用于删除消息) * `options` - 消息的附加属性(均为可选) * `messageId` - 消息Id,区别于handler * `priority` - 消息优先级 * `enqueueTime`: `Date` - 消息入队时间 * `nextVisibleTime`: `Date` - 消息下次可见时间 * `firstDequeueTime`: `Date` - 消息初次出队时间 * `dequeueCount`: `Number` - 出队次数(需为`Number`类型) * `raw` - 创建消息的原始信息 - `getContent`: `String` 获取消息内容 - `getHandler` 获取消息句柄 - `getMessageId` 获取消息Id - `getMsgPriority` 获取消息优先度 - `getEnqueueTime` 获取消息入队时间 - `getNextVisibleTime` 获取消息下次可见时间 - `getDequeueCount` 获取消息出队次数 - `getRawResponse` 获取消息原始信息 ### 配置项 - 公共配置项 - `queueName` 队列名称 - 阿里云MNS - `accountId` 阿里云账户ID - `keyId` 阿里云 AccessKey ID - `keySecret` 阿里云 AccessKey Secret - `mqRegion` 队列服务所在地域,例如杭州为`hangzhou`,具体可查看MNS控制台上的`endpoint`地址中的地域名 - 腾讯云CMQ - `keyId` 腾讯云 Secret Id - `keySecret` 腾讯云 Secret Key - `mqRegion` 队列服务所在地域 - gz(广州),sh(上海),bj(北京),shjr(上海金融),szjr(深圳金融), hk(香港),cd(成都),ca(北美),usw(美西),sg(新加坡) (来自 [kainonly/cmq-node-sdk](https://github.com/kainonly/cmq-node-sdk#%E5%BF%AB%E9%80%9F%E5%BC%80%E5%A7%8B)) ### Contribute Guideline 欢迎大家的PR/Issues来帮助我们完善这个项目,但请请留下方便理解的注释。 :) You are most welcome to make any contribution to improve this project, just please leave an understandable description of what you contribute :) ### License This Project is based on [MIT License](LICENSE)