У меня есть задача chron, чтобы выполнить ее наилучшим образом на Голанге.
- Мне нужно хранить большие данные из веб-службы в JSON в
sellers
- После сохранения этих
sellers
в базе данных, мне нужно просмотреть другой большой веб-сервис JSON с параметром sellersID
, чтобы сохранить в другую таблицу с именем customers
. - Каждый
customer
имеет начальное состояние, если это состояние изменилось сданные веб-службы (n ° 2) мне нужно сохранить разницу в другой таблице changes
, чтобы иметь историю изменений. - Наконец, если изменение равно нашемуусловия Я выполняю другое задание.
Моя текущая операция
var wg sync.WaitGroup
action.FetchSellers() // fetch large JSON and stort in sellers table ~2min
sellers := action.ListSellers()
for _, s := range sellers {
wg.Add(1)
go action.FetchCustomers(&wg, s) // fetch multiple large JSON and stort in customers table and store notify... ~20sec
}
wg.Wait()
- Первая трудность с этим кодом заключается в том, что я не контролирую количество обращений к веб-службе.
- Во-вторых, функция
action.FetchCustomers
выполняет большую часть работы, которая, я думаю, может быть выполнена параллельным способом. - Третья трудность состоит в том, что я не могу возобновить работу, если ошибкапроизошли в случае ошибок.
Мне нужно запускать этот код каждый час, поэтому он должен быть хорошо собран, в настоящее время он работает, но не лучшим образом.Я думаю, что с учетом использования Workol Pools в Go, как в этом примере Go на примере: Worker Pools Но у меня возникают проблемы с его созданием