高性能、解耦、异步的微博的消息队列

tabsu · · 5873 次点击 · 开始浏览    置顶
这是一个创建于 的主题,其中的信息可能已经有所发展或是发生改变。

离开微博已久,总想着弄点东西出来纪念一下当年的峥嵘岁月:)。在微博,你不能不知道鸟哥 Laruence ,也不能不知道 mq 。 mq 是一个基于 memcached 协议,用 c/c++编写的消息队列中间件,有着高性能、解耦、异步化等特点。现在用 Go 重新实现了一遍,将早前自己用 mq 的过程中觉得有些特性可以加上的,都一一加上了,由于其依赖的东西极少,只是简单用了一个轻巧型的嵌入式数据库 BerkeleyDB ,就可以实现一个 simple 的队列服务 tcp server ,见https://github.com/YoungPioneers/mgq, 特性如下,希望大家给些意见,么么哒。 1、一写多读:举个例子, set myqueue message ,只要 get 的时候, myqueue 开头,#分隔,如 myqueue#1 ,多个客户端之间读是彼此独立的,是不受影响的 默认的 get 是读取队列中未读取的最旧消息 2、支持 getc 操作,支持获取队列中某一个 cursor 位置的数据:举个例子,假设 myqueue 已经有 1000 条数据, getc myqueue 99,就可以获取队列当中 cursor 为 99 的消息 3、支持 getr 操作,支持获取队列中某一个 start cursor 位置开始,到 end 的数据:举个例子,假设 myqueue 已经有 20 条数据, getr myqueue 1 10 ,就可以获取队列当中 cursor 为[1-10]的消息 4、getn 支持 timeout 机制的阻塞 api 来获取队列中的最新消息,举个例子: getn queue 10,意味着 10s 内有数据则立马返回,否则会 10s 后立马返回数据不存在的错误,默认 getn 的 timeout 是 0s ,永不超时(需要注意的是如果客户端有 getn 的操作,则 set 的另一个客户端需要调用 setn )

有疑问加站长微信联系(非本文作者)

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

5873 次点击  
加入收藏 微博
2 回复  |  直到 2016-03-24 03:22:56
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传