vitalets / tinkoff-invest-api

Node.js SDK для работы с Tinkoff Invest API
45 stars 11 forks source link

Market Stream Disconnects #4

Closed BusinessDuck closed 2 years ago

BusinessDuck commented 2 years ago

Разрывы соединения при технических работах на севрере API.

Логи ошибок:

TinkoffApiError: /tinkoff.public.invest.api.contract.v1.MarketDataStreamService/MarketDataStream CANCELLED: Call cancelled at buildTinkoffApiError (/root/bots/node_modules/tinkoff-invest-api/src/api-error.ts:51:17) at errorMiddleware (/root/bots/node_modules/tinkoff-invest-api/src/api-error.ts:41:13) at runMicrotasks (<anonymous>) at processTicksAndRejections (node:internal/process/task_queues:96:5) at Object.next (/root/bots/node_modules/nice-grpc/src/client/createBidiStreamingMethod.ts:139:28) at MarketStream.loop (/root/bots/node_modules/tinkoff-invest-api/src/stream/base.ts:61:22) { path: '/tinkoff.public.invest.api.contract.v1.MarketDataStreamService/MarketDataStream', code: 1, details: 'Call cancelled', trackingId: '', envoyUpstreamServiceTime: '', ratelimit: '', ratelimitRemaining: '', ratelimitReset: ''

Необходимо сделать повторное переподключение (при этом сказали что есть метод восстановления пропущенных событий узнать что за метод и это скоре всего про сделки, тики достаточно просто реконнекта)

vitalets commented 2 years ago

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

@AlexanderVolkovTCS Александр, привет! А не подскажешь, как в стриме получить пропущенные события?

AlexanderVolkovTCS commented 2 years ago

Привет! Загрузить пропущенные трейды можно через метод https://tinkoff.github.io/investAPI/marketdata/#getlasttrades

BusinessDuck commented 2 years ago

@vitalets можно ли сплитануть этто issue чтобы отдельно сделать механизм восстановления общего стрима, а затем в него допилить уже восстановление пропущенных сделок. По 2м причинам 1) Думаю задача долгая и тестировать нужно тщательно эти восстановления 2) В Debut не используется слежение за сделками, и нам бы сильно помог уже простой реконнект.

PS. Если до открытия биржи реально закончить полностью таску то можно и не сплитать

vitalets commented 2 years ago

Привет! Загрузить пропущенные трейды можно через метод https://tinkoff.github.io/investAPI/marketdata/#getlasttrades

Ок, спасибо! В общем никакой магии )

vitalets commented 2 years ago

@vitalets можно ли сплитануть этто issue чтобы отдельно сделать механизм восстановления общего стрима, а затем в него допилить уже восстановление пропущенных сделок.

Согласен, так и надо сделать. Восстановление нужно продумать, чтобы ничего не потерять и лишнего не добавить.

vitalets commented 2 years ago

PS. Если до открытия биржи реально закончить полностью таску то можно и не сплитать

Дима, а если это срочно, ты же можешь прямо сейчас одной строчкой на уровне приложения сделать восстановление:

api.stream.market.on('close', () => api.stream.market.watch({...});

Или там сложность, что список текущих подписок теряется и их надо где-то отдельно хранить?

BusinessDuck commented 2 years ago

Да, в этом сложность, я могу костыльнуть, но до понедельника до открытия бирж это не нужно

vitalets commented 2 years ago

Пофикшено в https://github.com/vitalets/tinkoff-invest-api/pull/7