誰でもこの問題で私を助けることができます、私はドキュメントが示唆するように私の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に等しいが、バーアクティベーターの入力のペイロード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は上記のとおりです
メッセージは不変ですが、ペイロードは変更できません(文字列などの不変オブジェクトでない限り)。
service1でペイロードを変更すると、service2で変更が確認されます。
service2に変更を表示させたくない場合は、変更する前にペイロードを複製またはコピーする必要があります。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加