gpt4 book ai didi

go - Golang 中 main 函数的两个 .RUN() 函数

转载 作者:IT王子 更新时间:2023-10-29 02:09:45 24 4
gpt4 key购买 nike

一个 Go 新手,如果我的问题的答案真的很简单,请原谅,但我花了将近四个小时试图制作 Facktory Go Worker使用 Gin 框架编写的 API 启动并运行。这是我的主要功能的样子:

func main() {
r := gin.Default()
r.GET("/ping", func(c *gin.Context) {

go func() {
for i := 0; i < 10000; i++ {
produce() // Function to push jobs to Faktory
}
}()
c.JSON(200, gin.H{
"message": "pong",
})

})
r.Run() // listen and serve on 0.0.0.0:8080

mgr := worker.NewManager()

mgr.Register("SomeJob", someFunc)


// use up to N goroutines to execute jobs
mgr.Concurrency = 20

// pull jobs from these queues, in this order of precedence
mgr.Queues = []string{"critical", "default", "bulk"}

// Start processing jobs, this method does not return
mgr.Run()

}

mgr.Run()r.Run() 中,无论哪个先被调用,都会阻塞另一个所以如果 mgr.Run() 放在 r.Run() 之前 作业从 faktory 服务器中提取并执行,但服务器不启动,如果 r.Run() 则相反mgr.Run() 之前调用。任何帮助解决这个问题或指出我自己解决这个问题的方向的帮助将不胜感激。

faktory 服务器使用这个 image 在 docker 容器中运行但是作业被推送到 faktory 服务器,所以我认为这里没有任何配置问题。

最佳答案

由于两个调用都被阻塞,因此您需要在单独的 goroutine 中执行第一个调用,无论您希望它是哪个。第二个应该正常执行,以便它阻止 main 退出。

func main() {
// ...
go r.Run()

// ...
mgr.Run()
}

func main() {
// ...
go mgr.Run()

// ...
r.Run()
}

关于go - Golang 中 main 函数的两个 .RUN() 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50657570/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com