开源项目 [搜车开源] 阿里云 ONS Ruby SDK

42thcoder for 大搜车 · 2016年08月15日 · 最后由 42thcoder 回复于 2016年08月16日 · 3721 次阅读

背景

公司的微服务化越来越正规,需要用到消息队列的场景越来越多。之前尝试过自建消息队列,但是运维成本太高,还踩了几次坑,最终选择了阿里云的 ONS .

关于 ONS, 有兴趣的可以看下官方的博文,技术上还是很靠谱的。http://jm.taobao.org/2016/05/26/do-you-really-need-so-many-sync-call-in-your-distributed-application/

ONS 提供了多种接入方式,包括 TCP, HTTP, MQTT.

TCP

这种接入方式功能最多,性能最好,但是协议繁复,接入成本很高。官方提供了 Java 和 C++ 的 SDK.

技术层面上,Ruby 封装 C++ SDK , 开发量较小,开发难度也低,我们公司的 Node 团队已经吃了螃蟹。

HTTP

顾名思义,就是通过 HTTP 接口来做消息的管理,速度和稳定性没有保障。

MQTT

主要的应用场景是物联网中的嵌入式设备,受限与客户端性能,功能做了裁剪,同时有丢消息的风险。

综上,我们选择了用 Ruby 用封装一层 C++ SDK, 解决方案是 https://github.com/jasonroelofs/rice

项目介绍

项目地址在 https://github.com/souche/aliyun-ons-ruby-sdk, 欢迎来 FXXK. 主程是我们的 @0x005a 同学,大家快去围观大神。

项目依赖

  • Linux/Unix 系统
  • Ruby 2.1.5 或以上版本
  • Boost C++ 程序库

安装步骤

安装 Ruby 程序

$ rvm install 2.1.5

安装 Boost C++ 程序库

$ apt-get install libboost-all-dev

安装 ons

$ gem install ons

使用方式

环境准备

  • 安装 ons rubygems。
  • 代码里涉及到的 TOPIC、PRODUCER_ID、CONSUMER_ID,需要在 MQ 控制台上创建。Message Tag 可以完全由应用自定义,具体创建过程可参考 申请 MQ 资源
  • 使用 MQ 服务的应用程序需要部署在阿里云 ECS 上。

部分资料来自 消息队列 > TCP 接入 (专业) > C/C++ SDK 环境准备

生产者

producer = Ons::Producer.new('', '', '')

# 资源准备
producer.start

# 在 topic  下发送消息
producer.send_message('', 'tag', 'Hello, World!')

# 必须在程序退出前调用 shutdown 方法释放相关资源,否则可能出现栈错误
producer.shutdown

更多用法,请参考 {file:samples/producer.rb} 及 API 文档

消费者

consumer = Ons::Consumer.new('', '', '')

# 订阅 topic  下的所有消息
# 注意,当消息达到时,会调用下述函数,此函数会被调度到单独线程中执行
consumer.subscribe('', '*') { |message| p message }

# 资源准备
consumer.start

# 等待消息到达
sleep 32

# 必须在程序退出前调用 shutdown 方法释放相关资源,否则可能出现栈错误
consumer.shutdown

Roadmap

希望大家多多参与,能得到官方支持那是最好了。

后续希望做这几件事:

  • [] 开发 ons_on_rails, 在目前的 ons 之上封装一次,方便 Rails App 使用。
  • [] 支持更多的消息发送方式,目前仅支持单向发送。
  • [] 开发基于 Engine 的 Admin 页面,管理消息和服务状态

多余的话

这篇是搜车开源的第一篇,后续还会介绍些其他准备开源的项目,大家期待吧。

最后,照例放一个硬广。D 轮公司招靠谱 Ruby, 这世界很需要你呢,少年!

https://ruby-china.org/topics/30765

看起来像 RPC 服务呀

#1 楼 @huacnlee

引入 ONS 主要是为了系统之间的解耦,也有一部分性能方面的考虑。

当然也可以用来做 RPC, 它支持 可靠同步发送:

同步发送是指消息发送方发出数据后,会在收到接收方发回响应之后才发下一个数据包的通讯方式。

3 楼 已删除
需要 登录 后方可回复, 如果你还没有账号请 注册新账号