Google Cloud PubSub: ранее действующая подписка внезапно стала неавторизованной

У меня проблемы с API Google Cloud PubSub. Недавно я начал использовать Cloud PubSub для постановки сообщений в очередь для чат-сервера, над которым я работаю. Сообщения, поступающие из подписки PubSub, пересылаются пользователям с помощью библиотеки узлов socket.io. У меня нет проблем с настройкой - я запускаю свой сервер node.js, открываю пару окон браузера и могу без проблем болтать.

Однако я заметил, что часто после того, как сервер проработал несколько часов, он начинает выдавать следующую ошибку:

(node:2525) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project. (node:2525) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 2): Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential. See https://developers.google.com/identity/sign-in/web/devconsole-project.

...

(node:2525) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1253): Error: Request had invalid authentication credentials. Expected OAuth 2 access token, login cookie or other valid authentication credential...

Эта ошибка повторяется и повторяется (вы можете видеть увеличивающийся rejection id в сообщении об ошибке), пока не остановится через несколько минут и все не возобновит работу. Пока я получаю сообщения об ошибках, я не могу отправлять сообщения через Cloud PubSub.

Вот код, который настраивает слушателя:

function listenForMessages(handler)
{
    var pubsub = require('@google-cloud/pubsub')({
        projectId: config.pubsub_project_id,
        keyFilename: config.pubsub_keyfile
    });

    pubsub.subscribe(config.pubsub_topic, 'test-subscription', {autoAck: true}, function(err, subscription){
        subscription.on('message', function(message) {
            handler(message.data);
        });
    });
}

Учетные данные берутся из внешнего файла конфигурации - я почти уверен, что они в порядке, особенно с учетом того, что при первоначальном запуске сервера нет проблем с настройкой слушателя.

TL; DR: я начинаю периодически получать ошибку «неверные учетные данные» через несколько часов после запуска сервера узла, который использует Google Cloud PubSub для постановки сообщений в очередь.


person dunnaus    schedule 20.07.2017    source источник
comment
У меня тоже есть эта проблема в последнее время. Странно то, что у меня есть около 10 разных микросервисов, извлекающих из 10 разных очередей, но это всегда происходит только в одной конкретной очереди. И да, обычно это происходит от нескольких дней до недели, но, кажется, происходит регулярно.   -  person static416    schedule 24.07.2017
comment
Кроме того, я бы изменил название, если вы можете более точно описать проблему. Отказ от обещания случаен. Основная проблема заключается в том, что он случайно теряет авторизацию через некоторое время. РЕДАКТИРОВАТЬ: Я сам попытался отредактировать заголовок.   -  person static416    schedule 24.07.2017
comment
Хорошо, принял новое название. Спасибо.   -  person dunnaus    schedule 24.07.2017


Ответы (1)


Я столкнулся с той же проблемой и, наконец, нашел решение. Проблема заключалась в том, что токен google истек, и, таким образом, подписчик pubsub выбрасывал исключение. В github уже была ошибка с аналогичной проблемой oauth. (Ссылка)

Проблема была исправлена ​​в node-pubsub версии 0.20.0, и обновление до этой версии решит вашу проблему. Фактическое исправление было в google-auth-library-nodejs версии 2.0 и node-pubsub:v0.20.0 использует google-auth-library-nodejs:2.0.

Из примечаний к выпуску google-auth-library-nodejs:2.0 на github:

Метод OAuth2.refreshAccessToken устарел. Методы getAccessToken, getRequestMetadata и request при необходимости обновят токен автоматически. Нет необходимости обновлять токен вручную.

Надеюсь это поможет !!

person vizsatiz    schedule 19.10.2018