【GO】15.beanstalkd实例

  • 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

截图:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值