
由于阿里云那边迟迟不出 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 。
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 。
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(); 快来快来 Fxxk 我!然后提交 PR 什么的最喜欢了
「然我得不怎可能有人注我」
1 icedx 2016 年 1 月 25 日 兹迟一下 |
2 aqqwiyth 2016 年 1 月 25 日 资吃一下 |
5 tinyproxy 2016 年 1 月 26 日 楼主莫慌,我看了一下官网提供的 SDK ,好像只有 PHP 是有机会不用反编译的,下载打开一看 TM 也是.so , aliyun 内部的人都跟你一样偷懒啦 |
6 phoenixlzx 2016 年 1 月 26 日 点个赞,虽然不怎么敢用阿里云了现在 |