-
beanstalkd 简介
Beanstalkd,一个高性能、轻量级的分布式内存队列系统,最初设计的目的是想通过后台异步执行耗时的任务来降低高容量Web应用系统的页面访问延迟,支持过有9.5 million用户的Facebook Causes应用。后来开源,现在有PostRank大规模部署和使用,每天处理百万级任务。Beanstalkd是典型的类Memcached设计,协议和使用方式都是同样的风格,所以使用过memcached的用户会觉得Beanstalkd似曾相识。
-
mac安装
brew install beanstalkd
-
开启beanstalkd服务
/usr/bin/beanstalkd -l 0.0.0.0 -p 11300 -b /var/lib/beanstalkd/binlog -F &
//mac os前台
beanstalkd -l 0.0.0.0 -p 11300
-
beanstalkd参数:
/usr/bin/beanstalkd -h
Use: /usr/bin/beanstalkd [OPTIONS]
Options:
-b 开启binlog,断电后重启会自动恢复任务。
-f MS fsync最多每MS毫秒
-F从不fsync(默认)
-l ADDR侦听地址(默认为0.0.0.0)
-p端口侦听端口(默认为11300)
-u USER成为用户和组
-z BYTES设置最大作业大小(以字节为单位)(默认值为65535)
-s BYTES设置每个wal文件的大小(默认为10485760) (将被舍入到512字节的倍数)
-c压缩binlog(默认)
- n 不要压缩binlog
-v显示版本信息
-V增加冗长度
-h显示这个帮助
-
producer生产者代码:
package main
import (
"fmt"
"github.com/kr/beanstalk"
"time"
)
func main(){
//连接beanstalkd服务器
c, err := beanstalk.Dial("tcp", "127.0.0.1:11300")
if err != nil{
fmt.Printf("beanstalk init failed err:%s\n", err)
return
}
defer c.Close()
//设置tube队列
c.Tube.Name = "test"
c.TubeSet.Name["test"] = true
//发送消息
id, err := c.Put([]byte("new message"), 30, 0, 120*time.Second)
fmt.Printf("put message success id:%s\n", id)
}
-
consumer消费者代码:
package main
import (
"fmt"
"github.com/kr/beanstalk"
"time"
)
func main(){
//连接beanstalkd服务器
c, err := beanstalk.Dial("tcp", "127.0.0.1:11300")
if err != nil{
fmt.Printf("create beanstalkd failed err:%s\n", err.Error())
}
defer c.Close()
//设置tube队列
c.Tube.Name = "test"
c.TubeSet.Name["test"] = true
for {
//队列取消息 10秒后没有取到返回超时error
id, body, err := c.Reserve(10 * time.Second)
if err != nil{
fmt.Printf("read job failed err:%s\n", err)
continue
}
fmt.Printf("tube:%s | body:%s | id:%s\n", c.Tube.Name, string(body), id)
err = c.Delete(id)
}
}
安装beanstalkd管理工具aurora
brew install aurora
安装成功启动
aurora
截图: