|
Длительные операции: два сервера приложений | ☑ | ||
---|---|---|---|---|
0
Sevish
18.01.24
✎
09:32
|
Добрый день!
Столкнулись со странной проблемой. Настроено два сервера приложений, пользователя может закинуть на любой из них. При запуске длительной операции (БСП) если фоновое задание запустилось на том же сервере приложений (куда залогинился клиент) - проблем нет. Но (не знаю почему) фоновое задание может запуститься на втором сервере приложений и тогда проблема: результат выполнения в фоне помещенный в хранилище (так работает сама длительная операция) не доступен. Например, есть СРВ1 и СРВ2. Если пользователь на СРВ1 и фоновое задание запустилось на СРВ1 - все ок. Но если пользователь на СРВ1, а задание на СРВ2 - все, проблема. Вариант запретить выполнение фоновых заданий на одном из серверов - не вариант, мы же не знаем куда кинет пользователя. Ну и как бы этот параметр все равно не влияет на запрет выполнения "длительных операций в фоне". Подскажите пожалуйста, можно как-то принудительно запускать длительную операцию на том же сервере, что и клиент? |
|||
1
Garykom
18.01.24
✎
10:15
|
Надеюсь правильно передаете в фоновое адрес хранилища?
Исключением является возможность передачи данных из фонового задания в сеанс, инициировавший фоновое задание, с помощью временного хранилища. Для такой передачи следует в родительском сеансе поместить во временное хранилище пустое значение, передав идентификатор формы. Затем полученный адрес передать в фоновое задание через параметры фонового задания. Далее, если этот адрес использовать в параметре <Адрес>, то результат будет скопирован в сеанс, из которого было запущено фоновое задание.
Данные, помещенные во временное хранилище в фоновом задании, не будут доступны из родительского сеанса до момента завершения фонового задания. |
|||
2
Garykom
18.01.24
✎
09:54
|
(1)+ Технически если все правильно передано (с идентификатором формы) то фоновое обязано запуститься на том же сервере приложений что и сеанс пользователя
|
|||
3
H A D G E H O G s
18.01.24
✎
10:00
|
Столкнулись вы со странным в другом месте - вам зачем то понадобился гемморой с 2 серверами.
|
|||
4
Garykom
18.01.24
✎
10:14
|
(3) Когда количество юзеров (онлайн с активной работой) вырастает >200, одного сервера уже не хватает на тяжелых конфах
|
|||
5
НЕА123
18.01.24
✎
10:21
|
||||
6
Web00001
18.01.24
✎
10:25
|
(5)Два сервера в одном кластере в одной базе это не тоже самое, что два сервера в двух разных кластерах.
|
|||
7
Sevish
18.01.24
✎
10:30
|
(3) и (4) всё так и есть. Такая структура существует и она необходима.
|
|||
8
Sevish
18.01.24
✎
10:31
|
(1) благодарю за подсказку, проверю все ещё раз и если что - поправлю.
|
|||
9
Sevish
18.01.24
✎
10:42
|
В функции "ВыполнитьВФоне" есть код:
АдресРезультата = ?(ПараметрыВыполнения.АдресРезультата <> Неопределено, ПараметрыВыполнения.АдресРезультата, ПоместитьВоВременноеХранилище(Неопределено, ПараметрыВыполнения.ИдентификаторФормы)); Но эта функция уже выполняется в общем серверном модуле. Получается, что надо все же попробовать поместить во временное хранилище и получить адрес для "ПараметрыВыполнения.АдресРезультата" непосредственно в самой форме, откуда выполняется запуск длительной операции? |
|||
10
Sevish
18.01.24
✎
10:46
|
(1) "если этот адрес использовать в параметре <Адрес>" имеется в виду параметр процедуры, которую я выполняю в фоне? типа такого: "Процедура МояДлительнаяОперация(МассивПараметров, АдресРезультата) Экспорт"
|
|||
11
Garykom
18.01.24
✎
10:49
|
(10) в параметре <Адрес> для ПоместитьВоВременноеХранилище
|
|||
12
Garykom
18.01.24
✎
10:51
|
(9) Тут видно что если АдресРезультата пустой то помещает с ИдентификаторФормы пустое значение в хранилище АдресРезультата
Чтобы затем его использовать Короче заполни при вызове своего фонового ПараметрыВыполнения.АдресРезультата и ПараметрыВыполнения.ИдентификаторФормы |
|||
13
Sevish
18.01.24
✎
10:54
|
(12) Понял, попробую. Только вот проверить смогу через неделю :) когда релиз будет на проде. Благодарю!
|
|||
14
Sevish
22.01.24
✎
07:54
|
Всё оказалось на много банальнее :( Необходимо было получать данные хранилища &НаСервере, а не &наКлиенте.
Причем странно, в УФ это не важно, а вот если запускать на обычных формах (это УПП 1.3) - важно. Но на всякий случай всё равно сделал (12). |
Форум | Правила | Описание | Объявления | Секции | Поиск | Книга знаний | Вики-миста |