阿里云消息队列服务 ONS 的 Node.js SDK!

由于阿里云那边迟迟不出 Node.js 的 ONS SDK(master 分支还没东西,在另一个分支),我就自己用 ONS 的 C++ SDK 撸了一个 Node.js 版本的。

其实我也是有想过给官方贡献代码,后来粗粗瞄了一眼,发现这货的协议没文档的情况下来写的话要耗费蛮大的精力的,我只能投机取巧用现成 SDK 撸了。

其实这个包在一个月前就写好了,不过当时没找到很好的支持 ACK 的方法,今天脑袋突然一亮,用 libuv 的黑科技搞定了对 ACK 的支持,我才搬上台面发出来。

不过有一点需要注意:

因为阿里云 ONS 的官方 C++ SDK 是闭源的,且只提供了 Linux 下的静态链接库(libonsclient4cpp.a),所以该包目前为止只支持在 Linux 下安装。

如需开发环境,OSX 用户请移步 Linux 或者启动一个 Vagrant、Docker 等。

但是等哪天阿里云的 C++ SDK 如果编译好了 OSX 的链接库的话我会马上做上支持的。

废话不多说,上包:https://github.com/XadillaX/aliyun-ons


ONS(开放消息服务)是基于阿里开源消息中间件MetaQ(RocketMQ)打造的一款云消息产品。

安装

$ npm install --save ons

注意: 因为阿里云 ONS 的官方 C++ SDK 是闭源的,且只提供了 Linux 下的静态链接库(libonsclient4cpp.a),所以该包目前为止只支持在 Linux 下安装。

如需开发环境,OSX 用户请移步 Linux 或者启动一个 Vagrant、Docker 等。

还有一点,由于 C++ SDK 在线程中同步执行需要反馈处理结果,而 Node.js 需要异步执行,所以没法及时反馈结果,本包只能默许所有消息都成功处理,即 ACK 成功状态。ACK 成功失败特性已编码完成!

欢迎提供解决方案以及优化。

使用方法

首先你需要开通 ONS 服务并且获取 access key 以及 secret key,然后创建一个消费者 ID 或者生产者 ID,还有就是话题(topic)。

详情可以参考阿里云 ONS 帮助或者阿里云控制台

样例

你可以参考两个样例文件 consumer.js 以及 producer.js.

Consumer

通过下面的代码来创建一个 Consumer。

var Consumer = require("ons").Consumer;
var consumer = new Consumer(CUSTOMER_ID, TOPIC, TAGS, ACCESS_KEY, SECRET_KEY);

然后创建一个获取消息的事件监听。

consumer.on("message", function(msg, ack) {
    // 做一些事情
    // 
    // 该函数会在收到消息之后被触发。
    //
    // 在你做完事情之后别忘了调用 `ack.done(true)` 或是 `ack.done(false)`
    // 来告诉 ONS 你已处理消息成功或者失败,若失败则 ONS 会重试
    //
    // `ack.done()` 等价于 `ack.done(true)`
});

当你完成创建和设置监听函数之后,就可以初始化 Consumer 并开始监听消息了。

consumer.init(function(err) {
    if(err) return console.log(err);
    consumer.listen();
});

以及,你也可以在你想要的时候停止它。

consumer.stop();

Producer

通过下面的代码来创建一个 Producer。

var Producer = require("ons").Producer;
var producer = new Producer(PRODUCER_ID, ACCESS_KEY, SECRET_KEY);

创建完毕之后需要启动它才能发消息。

producer.start(function(err) {
    if(err) return console.log(err);
    console.log("Started!");
});

然后你就可以通过 send 函数来发消息了。

producer.send(KEY, TOPIC, TAGS, CONTENT, function(err, messageId) {
    console.log(arguments);
});

// `KEY` 参数并不是必选的,所以也可以如下调用

producer.send(TOPIC, TAGS, CONTENT, function(err, messageId) {
    console.log(arguments);
});

当然,你也可以在你想要的时候停止它。

producer.stop();

Contribute

快来快来 Fxxk 我!然后提交 PR 什么的最喜欢了🙈

「雖然我覺得不怎麼可能有人會關注我」

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 218,284评论 6 506
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,115评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,614评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,671评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,699评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,562评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,309评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,223评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,668评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,859评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,981评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,705评论 5 347
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,310评论 3 330
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,904评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,023评论 1 270
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,146评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,933评论 2 355

推荐阅读更多精彩内容