WSO2 BPS BPEL повторно использует асинхронные процессы

Имея WSO2 BPS 3.6.0, у нас есть несколько длительных асинхронных процессов. Я хотел бы повторно использовать процесс в нескольких других процессах (например, обработка ошибок, общие процедуры и т. д.).

Проблема в том, что в этом случае несколько процессов будут предоставлять одну и ту же службу обратного вызова:

ERROR {org.wso2.carbon.bpel.core.ode.integration.store.TenantProcessStoreImpl} -  Service: {http://xxx/bps/xxx}XXCallback already used by another process. Try again with a different service name

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

Я рассматриваю возможность предоставления немного другого имени службы (фрагмента URL-адреса?) Для каждого родительского процесса (даже раскрывающего один и тот же порт) и использования заголовка ReplyTo для принудительного ввода правильного URL-адреса обратного вызова. Я до сих пор не уверен, что это правильный подход.


person gusto2    schedule 29.11.2016    source источник


Ответы (1)


Process1 и Process2 асинхронно вызывают CommonProcess.

Process1 и Process2 должны реализовать операцию, определенную в Callback.wsdl.

CommonProcess вызовет операцию, определенную в Callback.wsdl, для установления связи с Process1/Process2.

ПроцессПакет1

  • Процесс1.bpel
  • Процесс1.wsdl
  • CommonProcess.wsdl
  • Обратный вызов.wsdl

ПроцессПакет2

  • Process2.bpel
  • Процесс2.wsdl
  • CommonProcess.wsdl
  • Обратный вызов.wsdl

ОбщийпроцессПакетаже

  • CommonProcess.bpel
  • CommonProcess.wsdl
  • Обратный вызов.wsdl

Как передать EPR Process1 и Process2 в CommonProcess для обратного вызова?

Это можно сделать с помощью DynamicEndpoints. EPR процесса может быть передан в сообщении полезной нагрузки во время вызова из Process1 или Process2 в CommonProcess. CommonProcess переопределит EPR партнерской ссылки, соответствующий Callback.wsdl, на EPR, переданный с входящим сообщением.

Вот пример, демонстрирующий игру с Partnerlink EPR.

https://github.com/apache/ode/tree/ode-1.3.x/distro/src/examples-war/DynPartner

В этом документе содержится дополнительная информация об этой опции: http://ode.apache.org/endpoint-references.html

Примечание. Это предоставляется в Apache ODE и может быть доступно в WSO2.

person Sathwik    schedule 30.11.2016
comment
Спасибо много! Видимо мне нужно переименовать службы обратного вызова в родительских процессах, но это нормально. Я собирался отправить URL-адрес обратного вызова в заголовке адресации, но пока мне не удалось прочитать заголовок адресации ReplyTo из сообщения. Любая подсказка плз? В качестве запасного варианта я могу передать URL-адрес обратного вызова в полезной нагрузке (мне это не нравится) - person gusto2; 30.11.2016
comment
Насколько мне известно, связь между процессами не может осуществляться с помощью заголовков WSA. - person Sathwik; 30.11.2016
comment
Действительно, я передаю URL-адреса обратного вызова в полезной нагрузке. Быстро и грязно, но работает. Моя идея заключалась в использовании локального транспорта, но какая-то ошибка в WSO2BPS заставляет меня использовать абсолютный URL-адрес http (но он работает, пока я не изменю порты). - person gusto2; 30.11.2016