gpt4 book ai didi

Spring 集成 RecipientListRouter 不会创建多个有效负载

转载 作者:行者123 更新时间:2023-12-04 10:37:11 25 4
gpt4 key购买 nike

请任何人帮助我解决这个问题,我按照文档建议配置了我的 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)

其中 foo 激活器输入上的 payload-2 等于 payload-1,而 bar 激活器输入上的 payload-3 等于 payload-1

但实际的工作流程是:

foo 激活器输入上的payload-2 等于payload-1 但bar 激活器输入上的payload-3 等于foo 激活器输出的payload-2 消息

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 如上所述

最佳答案

虽然消息是不可变的,但有效负载不是(除非它是一个不可变的对象,如字符串)。

如果您对 service1 中的有效负载进行变异,则将在 service2 中看到该变异。

如果您不希望 service2 看到突变,则需要在对其进行突变之前克隆/复制有效负载。

关于Spring 集成 RecipientListRouter 不会创建多个有效负载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60112339/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com