mule: Scatter Gather: Как агрегировать переменные с разных маршрутов, если мы устанавливаем целевую переменную в компоненте Scatter gather? - PullRequest
0 голосов
/ 08 мая 2020

Используя Mule 4, компонент Scatter Gather, я установил целевую переменную как «результат». У меня есть еще две переменные:

  1. firstVar: определено вне компонента Scatter Gather, но обновляется внутри одного маршрута
  2. secondVariable: определено внутри компонента Scatter Gather.

Когда я запускаю код, я ожидаю увидеть firstVar (updated), secondVariable и результат в vars, когда Scatter Gather завершится. Но я вижу только firstVar с начальным значением.

Наблюдение: если я удалю результат целевой переменной, я также вижу firstVar (обновлено), secondVariable и агрегированную полезную нагрузку.

Может кто-нибудь объясните пожалуйста, что я делаю не так?

Код для справки:

<?xml version="1.0" encoding="UTF-8"?>

<mule xmlns:ee="http://www.mulesoft.org/schema/mule/ee/core"
    xmlns:http="http://www.mulesoft.org/schema/mule/http"
    xmlns="http://www.mulesoft.org/schema/mule/core"
    xmlns:doc="http://www.mulesoft.org/schema/mule/documentation"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://www.mulesoft.org/schema/mule/core http://www.mulesoft.org/schema/mule/core/current/mule.xsd
http://www.mulesoft.org/schema/mule/http http://www.mulesoft.org/schema/mule/http/current/mule-http.xsd
http://www.mulesoft.org/schema/mule/ee/core http://www.mulesoft.org/schema/mule/ee/core/current/mule-ee.xsd">
    <flow name="ScatterGather-ExampleFlow"
        doc:id="5dec6c32-4da7-4be0-91e1-26744e6e4761">
        <http:listener doc:name="Listener"
            doc:id="a75d1ddb-0481-45be-992d-39e397160257"
            config-ref="HTTP_Listener_config" path="/api/scattergather" />
        <logger level="INFO" doc:name="Logger"
            doc:id="9bb44a1f-287f-415c-b19f-87798797cfa8"
            message="Starting Scatter Gather Sample" />
        <set-variable value='#["First Value"]'
            doc:name="First Variable"
            doc:id="1eb7430b-f6a8-4366-8594-8f76479148ab" variableName="firstVar" />
        <scatter-gather doc:name="Scatter-Gather"
            doc:id="ef921649-8269-46ba-b38e-8e55f2694368" target="result">
            <route>
                <ee:transform doc:name="Transform Message"
                    doc:id="c5b2717c-5917-4641-aa4c-2283614cc4af">
                    <ee:message>
                        <ee:set-payload><![CDATA[%dw 2.0 output application/java 
            --- payload]]></ee:set-payload>
                    </ee:message>
                    <ee:variables>
                        <ee:set-variable variableName="firstVar"><![CDATA[%dw 2.0 output application/java --- 
            "updated First Value"]]></ee:set-variable>
                    </ee:variables>
                </ee:transform>
                <set-payload value='#["First route PAyload"]'
                    doc:name="Set Payload"
                    doc:id="8c479443-dd94-410e-9346-fedb7c0d3d71" />
            </route>
            <route>
                <set-variable value='"secondValue"'
                    doc:name="SecondVariable"
                    doc:id="6f78c3a7-ae00-4693-93ca-da98217d36d4"
                    variableName="secondVariable" />
                <set-payload value='#["2nd routePayload"]'
                    doc:name="Set Payload"
                    doc:id="aad2f059-2a35-4c29-85d7-45e33f317e59" />
            </route>
        </scatter-gather>
        <logger level="INFO" doc:name="Logger"
            doc:id="d03caeac-41e3-4dc9-8b67-de1da841011c" message="#[vars]" />
    </flow>
</mule>

Ответы [ 2 ]

1 голос
/ 09 мая 2020

Без целевой переменной после того, как все маршруты обработки завершили выполнение, компонент Scatter-Gather создает новое событие Mule, которое объединяет все результирующие события Mule из каждого маршрута, а затем передает новое событие Mule следующему компоненту в потоке. .

Если используется Scatter Gather -> General-> target, то он заполняет результирующую полезную нагрузку (несколько событий мула) в новую целевую переменную, а исходное событие мула и его переменные сохраняются.

1 голос
/ 08 мая 2020

Полагаю, это связано с тем, что событие отбрасывается назначением целевой переменной. Вероятно, этого следовало ожидать. Событие содержит как сообщение / полезную нагрузку, так и переменные. Использование target только присваивает переменной полученную полезную нагрузку. Остальная часть измененного события теряется.

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

...