请有人帮助我解决这个问题,我按照文档的建议配置了我的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激活器输入上的有效载荷-2等于有效载荷-1,而条形激活器输入的有效载荷-3等于有效载荷-1。
但实际工作流程是:
foo激活器输入的有效载荷-2等于有效载荷-1,但是bar激活器输入的有效载荷-3等于foo激活器输出的有效载荷-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,如上文所述
发布于 2020-02-07 15:08:53
虽然消息是不可变的,但有效负载不是(除非它是一个不可变的对象,例如字符串)。
如果您在service1中更改了有效负载,则在service2中将看到该突变。
如果不希望service2看到突变,则需要在变异之前克隆/复制有效负载。
https://stackoverflow.com/questions/60112339
复制相似问题