|
Можно ли в http сервисе вернуть ответ, потом продолжить выполнение кода? | ☑ | ||
---|---|---|---|---|
0
anders297
05.10.23
✎
11:54
|
Хочу по апи получить некоторые данные, вернуть клиенту ответ что получил их и все ок, далее продолжить выполнение тяжелого кода.
В методе HHTP сервиса Ответ = Новый HTTPСервисОтвет(200); Ид = Запрос.ПараметрыURL["id"]; Ответ.УстановитьТелоИзСтроки("success"); Возврат Ответ; // Здесь продолжить работу с полученным ИД Возможно ли это? Получается что мне эти идентификаторы нужно складывать в какое-то хранилище типа плана обмена, потом регзаданием обрабатывать. Но в рамках задачи, обработать нужно максимально быстро, насколько это возможно. Неохота регзадание каждые 10 секунд крутить ради запросов, которых может быть несколько в сутки. |
|||
1
Donkey_hot
05.10.23
✎
10:52
|
(0) БСП, ВыполнитьПроцедуру не подойдет?
|
|||
2
Новиков
05.10.23
✎
11:00
|
(0) вернуть клиенту ответ что получил их и все ок
и обработать нужно максимально быстро, насколько это возможно В некотором контекстном противоречии. Если нужно отдать клиенту "квитанцию об успешной загрузке" в терминах обменов 1С - разговор один и твои проблемы, что ты далее будешь делать с загруженным. Т.е. это не проблемы сервиса http и его работы, он заканчивает свою деятельность отдачей ответа. Если же с отдачей нужно как-то проинформировоать ту сторону о результатах обработки этой загрузки, то разговор другой. |
|||
3
Hmster
05.10.23
✎
11:06
|
(0) А разве нельзя в самом сервисе перед отправкой ответа запустить регл. задание?
|
|||
4
Новиков
05.10.23
✎
11:22
|
(3) В общем случае, можно - но это проблему не решит, т.к. если возможна повторная до-обработка/новая обработка данных полученных ранее от внешнего api, то получается "одноразовый" http-сервис загрузчик какой-то: данные принял, ок вернул наружу, а обработать не смог и, допустим, упал на чем-то. Я бы сразу на это расчитывал, если это какой-то загрузчик прайс-листов или что-то подобного.
|
|||
5
anders297
05.10.23
✎
11:47
|
(2) информировать о успешной обработке не нужно. Только то что идентификатор я получил. Дальше мои проблемы.
|
|||
6
anders297
05.10.23
✎
11:50
|
(4) да, у меня предусмотрен функционал, который хранит полученные ИД, и он прослеживает чтобы их обработка прошла до конца. Но уведомления о нештатных ситуациях обрабатываются на нашей стороне. Клиенту по апи они не нужны.
|
|||
7
anders297
05.10.23
✎
11:52
|
(3) Я никогда раньше не запускал регзадания програмно )
Это то-же самое что запуск фоновых заданий? |
|||
8
DirectorGora
05.10.23
✎
11:57
|
(0) По опыту скажу отсылка данных по http сервису вполне быстро отрабатывает, а вот если Вы хотите получить ответ от стороннего сервера, то вполне может много времени занять.
|
|||
9
DirectorGora
05.10.23
✎
11:58
|
(7) Регламентные задания отличаются от фоновых расписанием, не?
|
|||
10
Новиков
05.10.23
✎
12:03
|
(5) в этом случае, тогда эти "сырые данные" вы просто грузите в РС, структура которого совпадает полученным. Если у вас это 1 поле какое-то идентификатор, то значит идентификатор. И отдельный ресурс сделаете "Обработано". И заданием просто вычитываете, что не обработано, обрабатываете и проставляете флаг обработки. Это позволит вам этот процесс выстроить так, как он у вас в жизни происходит. Более того, сами можете настроить и второе задание, которое по какому-то SLA (дате получения данных по апи) будет алерты вам слать - дескать, вот загрузил данные, а 3 дня обработать их не могу. Ну, появится более такой гибкий и хороший механизм. А если сделать в лоб, запуск задания из сервиса - это плохая практика, одноразовая. Не получилось обработать и чего?
|
|||
11
Hmster
05.10.23
✎
12:13
|
(7)
ВидЗадания - Имя рег задания МетаРегЗадание = Метаданные.РегламентныеЗадания.Найти(ВидЗадания); Если Не МетаРегЗадание = Неопределено Тогда Попытка СтруктураОтбора = Новый Структура; СтруктураОтбора.Вставить("Метаданные",МетаРегЗадание); РеглЗад=РегламентныеЗадания.ПолучитьРегламентныеЗадания(СтруктураОтбора); Для Каждого Задание Из РеглЗад Цикл Попытка Задание.Записать(); Исключение КонецПопытки; КонецЦикла; Исключение КонецПопытки; КонецЕсли; |
|||
12
Волшебник
05.10.23
✎
12:27
|
(11) Не надо глотать ошибки, это плохая практика
|
|||
13
anders297
05.10.23
✎
12:55
|
(11) спасибо
|
|||
14
anders297
05.10.23
✎
12:57
|
Когда мы делаем Задание.Записать() - Это запуск регзадания, сейчас отдельным процессом?
|
|||
15
Donkey_hot
05.10.23
✎
12:57
|
В упор не пойму, причем тут рег. задания...
|
|||
16
arsik
гуру
05.10.23
✎
12:58
|
А чем вам фоновые то не подошли?
|
|||
17
Donkey_hot
05.10.23
✎
13:03
|
(16) + Вот-вот
|
|||
18
anders297
05.10.23
✎
13:04
|
(16) та наверное ничем) в начале о них не подумал.
|
|||
19
Donkey_hot
05.10.23
✎
13:05
|
(18) Если есть БСП, см. (1), в противном случае см. МенеджерФоновыхЗаданий, метод Выполнить()
|
|||
20
mTema32
05.10.23
✎
13:26
|
(0) Складываешь данные в какой-нибудь РС с признаком обработаны/не обработаны. И фоном вешаешь задание которое эти данные лопатит, запускаясь с нужной периодичностью.
|
|||
21
Valdis2007
05.10.23
✎
14:36
|
(5) ну тогда тебе и не надо фоновые зад. , просто делай, что надо после - Возврат Ответ;
|
|||
22
Valdis2007
05.10.23
✎
14:42
|
Ответ = Новый HTTPСервисОтвет(200);
Ид = Запрос.ПараметрыURL["id"]; Ответ.УстановитьТелоИзСтроки("success"); //запуск асинхронной процедуры посмотри в СП подробности ФоновыеЗадания.Выполнить("",МассивПараметров, Строка(Новый УникальныйИдентификатор),""); // Возврат Ответ; |
|||
23
mikecool
05.10.23
✎
15:15
|
(9) сотрудник на 666к рублей не должен задавать таких вопросов
|
|||
24
DirectorGora
05.10.23
✎
15:26
|
(23) З - зависть))
|
|||
25
ДедМорроз
05.10.23
✎
23:28
|
Фоновые задания - это хорошо,но только,если клиент-сервер.
|
|||
26
Новиков
06.10.23
✎
09:01
|
(25) Думаешь, если файловая, то у него нет возможности запустить отдельный клиентский сеанс для этих дел?
|
|||
27
Hmster
06.10.23
✎
09:38
|
Фоновые задания это конечно хорошо, но если нужно гарантировано выполнить код, лучше подстраховаться регл.заданием.
Например, задание выполняется раз 10 минут, но при определенных обстоятельствах можно запустить раньше срока. |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |