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

2025-10-16 16:11:23

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语言中使用分布式任务队列?

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语言中使用分布式任务队列?

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语言中使用分布式任务队列?

声明:本网站引用、摘录或转载内容仅供网站访问者交流或参考,不代表本站立场,如存在版权或非法内容,请联系站长删除,联系邮箱:site.kefu@qq.com。
猜你喜欢