Spring 集成 RecipientListRouter 不会创建多个负载
Spring integration RecipientListRouter doesn't create multiple payloads
谁能帮我解决这个问题,我按照文档中的建议配置了 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 等于 bar 激活器[=33] 输入端的 payload-1 和 payload-3 =] 等于 payload-1
但实际工作流程是:
foo 激活器 输入端的 payload-2 等于 payload-1,但 bar 激活器[=33] 输入端的 payload-3 =] 等于 foo activator
输出的 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 中改变 payload,该改变将在 service2 中看到。
如果您不希望 service2 看到突变,您需要在突变之前 clone/copy 负载。
谁能帮我解决这个问题,我按照文档中的建议配置了 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 等于 bar 激活器[=33] 输入端的 payload-1 和 payload-3 =] 等于 payload-1
但实际工作流程是:
foo 激活器 输入端的 payload-2 等于 payload-1,但 bar 激活器[=33] 输入端的 payload-3 =] 等于 foo activator
输出的 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 中改变 payload,该改变将在 service2 中看到。
如果您不希望 service2 看到突变,您需要在突变之前 clone/copy 负载。