A Новичок Go, поэтому, пожалуйста, прости, если ответ на мой вопрос действительно прост, но я потратил почти четыре часа, пытаясь настроить Facktory Go Worker и работать с API, написанным с помощью Gin Framework.Вот как выглядит моя основная функция:
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()
заданиямиизвлекаются из факторного сервера и выполняются, но сервер не загружается, и наоборот, если r.Run()
вызывается до mgr.Run()
.Буду очень признателен за любую помощь в решении этого вопроса или указание мне, как самостоятельно разобраться в этом.
Сервер faktory работает в контейнере Docker с использованием этого образа , но задания переносятся на сервер Faktory, поэтому я не думаю, что здесь есть какие-либо проблемы с конфигурацией.