Тайм-аут WSO2 BPS BPEL, когда корреляция не найдена

Работаем с WSO2 BPS 3.6.0 — у нас есть служба, которая уведомляет запущенный процесс BPEL о событии.

Пока процесс запущен, он отлично работает (используя корреляцию). Но когда процесс уже завершен, запрос не получает никакого ответа. Я в порядке, если можно вызвать исключение, но отсутствие ответа раздражает. Есть ли способ быстро выйти из строя, если нет (активного) экземпляра с конкретной корреляцией?

Изменить: фактически действия получения, выбора и onEvent ведут себя одинаково

заранее спасибо


person gusto2    schedule 25.11.2016    source источник
comment
Похоже, нам нужно создать таблицу внешней корреляционной базы данных, и вызывающая служба должна будет проверить, активен ли экземпляр.   -  person gusto2    schedule 28.11.2016


Ответы (1)


Apache ODE предназначен для постановки в очередь входящих сообщений, которые приходят раньше.

Пример: Процесс

Прием1 -> Прием2 -> Прием3 -> Ответ3

Receive1: создает экземпляр и инициирует корреляцию.

Receive2: Экземпляр ожидает прибытия сообщения.

Но сообщение в Receive3 поступает раньше, чем Receive2, и, следовательно, ставится в очередь. Поскольку следующим действием является Reply3, это синхронный вызов, и канал истечет по тайм-ауту в ожидании ответа.

Как только Receive2 прибывает, механизмы видят, что сообщение для Receive3 уже получено, и завершают экземпляр.

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

Примечание. Это поведение Apache ODE, если WSO2 не изменил это поведение.

person Sathwik    schedule 30.11.2016
comment
Спасибо за ответ. Я вижу смысл. Действительно, сервер ведет себя так, как вы описали. Таким образом, даже если корреляция не найдена, вызов ожидает ее создания. Похоже, что вызывающая служба должна будет проверить, существует ли корреляция (бизнес-объект), прежде чем вызывать конечную точку BPEL. - person gusto2; 30.11.2016
comment
Просто интересно, а зачем вы хотите проверить? - person Sathwik; 30.11.2016
comment
Во время обработки запроса (может занять дни или недели) клиент может предоставлять обновления или события, связанные с запросом (обрабатываются onEvent или выбираются с корреляцией). После завершения процесса любое последующее обновление должно быть отклонено. Так что получить тайм-ауты на самом деле не вариант. К счастью, у нас есть ESB перед сервером BPEL, поэтому можно проверить состояние запроса (бизнес-объекта). - person gusto2; 30.11.2016