能联网的linux或者mac电脑
首先获取项目代码:go get github.com/RichardKnop/machinery/v1
machinery项目自带了一个使用示例,进入后,先合适配置文件config.yml:cd $GOPATH/src/github.com/RichardKnop/machinery/example
启动worker: go run machinery.go worker
启动sender,下发任务,可以看到,下发了几个计算任务。
在worker端,可以看到收到的消息的情况,以及计算过程的日志
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) }
在server中注册task。每个task都是一个函数,task函数返回的最后一个参数必须是error,例如: func HelloWorld(arg string) (string, error) { return 'Hi, i'm worker@localhost', nil }
最后创建worker,并启动. //create worker worker := server.NewWorker('worker@localhost', 10) err = worker.Launch() if err != nil { log.Fatal(err) }
发送端用来向worker发送任务。发送端也需要像worker一样创建server,在server注册task,需要与worker保持一致。
每个要发送的task,用Signature描述。
然后就可以获取task执行的结果。
先启动worker,worker启动后,结果如下:
然后启动sender,可以看到任务指定的结果:
在worker端,可以到详细的任务执行日志
machinery支持很多task的编排方式,限于篇幅这里不介绍。