Header Enricherを参照します。代わりに、Gary Russelが述べたように、各メッセージはそのペイロードまたはヘッダー内のすべての情報を運びます。
Spring Integration Java DSLを使用していて、clientId
をメッセージヘッダーで転送する場合は、enrichHeader
トランスを使用できます。 HeaderEnricherSpec
が提供されているので、指定されたヘッダーに対して動的に決定された値を返す関数を受け入れることができます。
private String deriveClientId(Message<File> fileMessage) {
String fileName = fileMessage.getHeaders().get(FileHeaders.FILENAME, String.class);
String clientId = /*some other logic for deriving clientId from*/fileName;
return clientId;
}
(FILENAME
ヘッダーがFTPメッセージソースによって提供される)
:deriveClientId
方法は一種のかもしれない
return IntegrationFlows
.from(/*ftp source*/)
.enrichHeaders(e -> e.headerFunction("clientId", this::deriveClientId))
./*split, aggregate, etc the file according to clientId*/
、:あなたのユースケースのように、これは次のようになりますダウンストリームフローのどこかでclientId
ヘッダーにアクセスする必要がある場合は、上記のファイル名と同じ方法で行うことができます。
String clientId = message.getHeaders().get("clientId", String.class);
しかし、message
には、中間フロー項目のどこかで失われた可能性のあるヘッダーが含まれていることを確認してください。これは、ある時点で手動でメッセージを作成してさらに送信する場合に発生する可能性があります。
Message<PayloadType> newMessage = MessageBuilder
.withPayload(payloadValue)
.copyHeaders(precedingMessage.getHeaders())
.build();
メッセージヘッダは春の統合で不変であることに注意してください:ためには、あなたが建物の中にそれらをコピーすることができ、先行するメッセージから任意のヘッダを失いません。既存のメッセージのヘッダーを追加または変更するだけでは意味がありません。新しいメッセージを作成するか、HeaderEnricher
を使用してください。両方のアプローチの例を上に示します。