IBM Integration Bus, лучшие практики для вызова нескольких сервисов

Итак, у меня есть это требование, которое принимает один документ, и из этого необходимо создать один или несколько документов на выходе.

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

В прямом коде это было бы просто (концептуально)

InputData in = <something>

if (getItemFromExternalSystem(in.key1) == null) {
     createItemSpecificToKey1InExternalSystem(in.key1);
}
if (getItemFromExternalSystem(in.key2) == null) {
     createItemSpecificToKey2InExternalSystem(in.key1, in.key2);
}
createItemFromInput(in.key1,in.key2, in.moreData);

По сути, это своего рода "убедиться, что эти данные присутствуют".

Тем не менее, в МИБ Как мне добиться этого? Если бы я использовал подпоток для цикла Get/create, вывод подпотока был бы таким, каким будет результат последней операции, он возвращается из подпотока как новое "сообщение" потока, но на самом деле я не заботиться о значении из подпотока "обеспечить наличие данных". Вместо этого мне нужно продолжить работу над моим исходным сообщением, но все же дождаться завершения различных подпотоков, прежде чем я смогу запустить свой последний "createItem"

2 ответа

Вы можете использовать Узлы агрегации: например, использовать 3 потока:

  1. первым будет распространять ваше оригинальное сообщение третьему
  2. второй будет вызывать операции createItemSpecificToKey1InExternalSystem и createItemSpecificToKey2InExternalSystem
  3. третий будет агрегировать результаты первого и второго и вызвать createItemFromInput.

Вы рассматривали возможность использования узла Collector? Он соберет ваши записи в N "коллекций", а затем вы можете перебирать коллекции и выводить по одному документу на коллекцию.

Другие вопросы по тегам