Две функции .RUN () из главной функции в Golang - PullRequest
0 голосов
/ 02 июня 2018

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, поэтому я не думаю, что здесь есть какие-либо проблемы с конфигурацией.

1 Ответ

0 голосов
/ 03 июня 2018

Поскольку оба вызова блокируются, вам нужно выполнить первый, в зависимости от того, что вы хотите, в отдельной программе.Второй должен выполняться нормально, чтобы он блокировал выход main.

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

    // ...
    mgr.Run()
}

или

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

    // ...
    r.Run()
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...