怎样用go语言中使用分布式任务队列

 时间:2024-10-12 09:22:54

布式任务队列是大型系统中经常用的技术方案,是一种高效、可靠性高,能够承受海量并发的技术方案。目前有个名为[machinery][1]的开源项目,用go语言开发了一个分布式任务框架。

工具/原料

能联网的linux或者mac电脑

快速体验

1、首先获取项目代码:go get github.com/RichardKnop/machinery/v1

怎样用go语言中使用分布式任务队列

2、在本地安装redis和rabbitmq。mac上的安装方法可以查看百度经验上的另外两篇文章。

3、machinery项目自带了一个使用示例,进入后,先合适配置文件config.yml:cd $GOPATH/src/github.com/RichardKnop/machinery/example

怎样用go语言中使用分布式任务队列

4、启动worker:go run machinery.go worker

怎样用go语言中使用分布式任务队列

5、启动sender,下发任务,可以看到,下发了几个计算任务。

怎样用go语言中使用分布式任务队列

6、在worker端,可以看到收到的消息的情况,以及计算过程的日志

怎样用go语言中使用分布式任务队列

worker的开发

1、worker是用来执行任务的,worker启动的张虢咆噘时候注册它能够承担的任务。首先要创建一个server: var cnf = &config.Config{ Broker: "amqp://guest:guest@localhost:5672/", DefaultQueue: "machinery_tasks", ResultBackend: "redis://127.0.0.1:6379", AMQP: &config.AMQPConfig{ Exchange: "machinery_exchange", ExchangeType: "direct", BindingKey: "machinery_task", }, } //init server server, err := machinery.NewServer(cnf) if err != nil { log.Fatal(err) }

怎样用go语言中使用分布式任务队列

2、在server中注册task。每个task都是一个函数,task函数返回的最后一个耩撞苏粪参数必须是error,例如: func HelloWorld(arg string像粜杵泳) (string, error) { return "Hi, i'm worker@localhost", nil }

怎样用go语言中使用分布式任务队列

3、最后创建worker,并启动. //create worker worker := server.NewWorker("worker@localhost", 10) 髫潋啜缅err = worker.Launch() if err != nil { log.Fatal(err) }

怎样用go语言中使用分布式任务队列

sender开发

1、发送端用来向worker发送任务。发送端也需要像worker一样创建server,在server注册task,需要与worker保持一致。

怎样用go语言中使用分布式任务队列

2、每个要发送的task,用Signature描述。

怎样用go语言中使用分布式任务队列

3、然后就可以获取task执行的结果。

怎样用go语言中使用分布式任务队列

运行结果

1、先启动worker,worker启动后,结果如下:

怎样用go语言中使用分布式任务队列

2、然后启动sender,可以看到任务指定的结果:

怎样用go语言中使用分布式任务队列

3、在worker端,可以到详细的任务执行日志

怎样用go语言中使用分布式任务队列
  • 如何用迅雷APP检测网速
  • 小米手机静态IP地址设置
  • 魅族手机怎么解决wlan故障
  • fifa17实用过人技巧
  • 小米4如何设置固定IP地址?
  • 热门搜索
    我的梦想手抄报图片 清明节手抄报图片简单 历史手抄报资料 科技手抄报资料大全 中秋节手抄报简单又好看 有关弟子规的手抄报 防火防震手抄报 关于科技的手抄报资料 我爱校园手抄报 全国学生营养日手抄报