Интеграция Spring RecipientListRouter не создает несколько полезных нагрузок - PullRequest
2 голосов
/ 07 февраля 2020

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

@Bean
    public IntegrationFlow routerFlow() {
        return IntegrationFlows.from(CHANNEL_INPUT)
                .routeToRecipients(r -> r
                        .applySequence(true)
                        .ignoreSendFailures(true)
                        .recipient(CHANNEL_OUTPUT_1)
                        .recipient(CHANNEL_OUTPUT_2)
                        .sendTimeout(1_234L))
                .get();
    } 

@ServiceActivator(inputChannel = CHANNEL_OUTPUT_1, outputChannel = CHANNEL_END)
    public Object foo(Message<?> message) {
       message.gePayload();
      //  processing1() ...
    }

@ServiceActivator(inputChannel = CHANNEL_OUTPUT_2, outputChannel = CHANNEL_END)
    public Object bar(Message<?> message) {
       message.gePayload();
      //  processing2() ...
    }

Я ожидаю получить этот рабочий процесс:

CHANNEL_INPUT(payload-1) |----> CHANNEL_OUTPUT_1(payload-2) 
                         |----> CHANNEL_OUTPUT_2(payload-3)

где полезная нагрузка- 2 на входе активатора foo равняется полезной нагрузке-1 и полезной нагрузке-3 на входе активатора бара равняется полезной нагрузке-1

Но фактический рабочий процесс это:

полезная нагрузка-2 на входе активатора foo равна полезной нагрузке-1, но полезная нагрузка-3 на входе активатора бара равна полезной нагрузке- 2 сообщение о выходе foo activator


it seems like this is the actual workflow
CHANNEL_INPUT(payload-1)----> CHANNEL_OUTPUT_1(payload-2)----> CHANNEL_OUTPUT_2(payload-3)

после отладки Я замечаю, что message.getHeader () не совпадают (на самом деле они содержат "sequenceNumber" "и" sequenceSize "), но для message.getPayload , как описано выше

1 Ответ

2 голосов
/ 07 февраля 2020

Пока сообщение является неизменным, полезная нагрузка не является (если это не неизменный объект, такой как строка).

Если вы измените полезную нагрузку в service1, мутация будет видна в service2.

Вам нужно клонировать / скопировать полезную нагрузку перед ее изменением, если вы не хотите, чтобы service2 видел мутацию.

...