Получена ошибка 4xx при подписке на услугу Podio Push в шаблоне go concurrent - PullRequest
0 голосов
/ 03 января 2019

При попытке подписаться на службу Podio Push возникли непредвиденные ошибки. Я использую шаблон параллелизма golang, определенный здесь , а вот клиентская библиотека bayeux , используемая для подписки.

Обычно поток пытается сначала извлечь элемент, а затем подписаться на push-объект, предоставленный с объектом item. Существует объект канала, в котором я храню каждую задачу (taskLoad: ~ каждый item_id с учетными данными, необходимыми для поиска)

item := new(podio.Item)
item, err = podio.GetItem(itemId)
if err != nil {
    log.Errorf("PODIO", "Could not get item %d -> %s", itemId, err)

    return
}

, а затем внутри другого функа

messages := make(chan *bayeux.Message)
server := GetBayeux()
defer server.Close()

if err = push.Subscribe(server, messages); err != nil {
    // log err, with item details
    log.Errorf("PODIO", "%s", err, push)

    // re-enqueue the task in taskLoad channel
    go enqueueTask(true, messages, sigrepeat, timer)

    // release sigwait channel on subscription error
    <-sigwait

    return
}

здесь GetBayeux func - это просто синглтон, который оборачивает клиента

func GetBayeux() *bayeux.Client {
    bayeuxOnce.Do(func() {
        Bayeux = bayeux.NewClient("https://push.podio.com/faye", nil)
    })

    return Bayeux
}

есть около 15000 записей для прослушивания, и я должен подписаться на каждый из них, но, к сожалению иногда Я получаю одну из этих ошибок при обработке подписок

401:k9jx3v4qq276k9q84gokpqirhjrfbyd:Unknown client [{"channel":"/item/9164xxxxx","signature":"46bd8ab3ef2a31297d8f4f5ddxxxx","timestamp":"2018-01-02T14:34:02Z","expires_in":21600}]

OR

HTTP Status 400 [{"channel":"/item/9158xxxxx","signature":"31bf8b4697ca2fda69bd7fd532d08xxxxxx","timestamp":"2018-01-02T14:37:02Z","expires_in":21600}]

OR

[WRN] Bayeux connect failed: HTTP Status 400

OR

Bayeux connect failed: Post https://push.podio.com/faye: http2: server sent GOAWAY and closed the connection; LastStreamID=1999, ErrCode=NO_ERROR, debug=""

Итак, я хотел бы знать, почему у меня появились эти ошибки, и, прежде всего, как я могу их исправить, чтобы прослушивать все элементы в области действия.

Если кто-нибудь знает, есть ли какие-либо ограничения в отношении одновременного доступа в службу podio push?

Спасибо

ОБНОВЛЕНИЕ 2019-01-07

это был синглтон, который испортил процесс. как это было в контексте обычной программы, были некоторые подписки, которые не были разрешены, потому что сервер был закрыт другой программой. Исправление заключалось в том, чтобы раскрыть метод Unsubscribe и использовать его вместо метода Close, который отключает клиента от сервера.

defer server.Close()

стал

defer push.Unsubscribe(server)

...