由于阿里云那边迟迟不出 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-01-25 21:30:04 +08:00
兹迟一下
|
2
aqqwiyth 2016-01-25 22:15:03 +08:00
资吃一下
|
5
tinyproxy 2016-01-26 00:31:51 +08:00
楼主莫慌,我看了一下官网提供的 SDK ,好像只有 PHP 是有机会不用反编译的,下载打开一看 TM 也是.so , aliyun 内部的人都跟你一样偷懒啦
|
6
phoenixlzx 2016-01-26 08:08:34 +08:00
点个赞,虽然不怎么敢用阿里云了现在
|