WSO2 ESB: как заставить посредника Iterate ждать ответа перед отправкой следующего запроса

У меня нет проблем с тем, чтобы заставить посредника Iterate работать и вызывать его на другую внешнюю конечную точку. Однако мне кажется (судя по журналу), что ESB будет отправлять все запросы довольно быстро, независимо от того, установил ли я Sequencing на True или False. Эта быстрая отправка запроса, похоже, вызывает у меня проблемы с внешней веб-службой, на которую указывает моя конечная точка. Если у меня есть 1 элемент в xml для работы Iterate, все в порядке. Но я получаю всевозможные ошибки, если я повторяю 2 или более.

Вот почему мне интересно, могу ли я в любом случае заставить посредника Iterate вызывать эту внешнюю конечную точку, ждать ответа, а затем вызывать внешнюю конечную точку со следующим запросом. Как я могу добиться этого с помощью WSO2 ESB?

Если бы мне пришлось делать это с кодами, я бы поместил запросы в массив и установил счетчик с размером массива. Затем я возьму первый элемент из массива и вызову веб-службу. Когда ответ вернется, я сначала помещу его в массив результатов. Увеличиваю счетчик на 1. Затем проверяю, есть ли еще элементы в массиве запроса, если да, то делаю следующий вызов.


person H. Lo    schedule 06.10.2012    source источник


Ответы (3)


Я думаю, вы можете использовать переменную Flag (посредник свойств):

Я бы добавил посредник свойства в Insquence, называемый STATUS, установленный на «request_iterate», позже в OutSequence вы можете создать посредника Switch, где первый случай соответствует «request_iterate», и посредника Send, который вызывает конечную точку после того, как он установил свойство ( «СТАТУС») на «response_iterate». Случай 2 будет соответствовать «response_iterate» и выполнит все, что вам нужно выполнить после ответа.

Если у вас есть проблемы со временем, вы можете реализовать сценарий регулирования с помощью хранилища сообщений и обработчика сообщений.

Примечание: шаблоны сообщений обычно предназначены для асинхронных операций.

Надеюсь, это поможет

person nuvio    schedule 08.10.2012

Попробуйте использовать атрибут blocking="true" в посреднике вызовов, как показано ниже.

<call blocking="true">
 <endpoint key="yourEndpointName"/>
</call>

Это должно решить проблему.

Спасибо, надеюсь, это поможет

person Aswin    schedule 17.10.2016

Я думаю, вы можете использовать посредник «вызов» или использовать посредник «вызов» для установки режима блокировки в значение «истина». Для получения дополнительной информации перейдите по следующей ссылке: https://docs.wso2.com/display/ESB490/Call+Mediator

person Mehrnoosh    schedule 31.10.2016