Im Frühjahr Integration-Anwendungen gibt es für staatlichen Sharing keine einzelnen ExecutionContext ist. Stattdessen, wie Gary Russel erwähnt hat, trägt jede Nachricht alle Informationen innerhalb ihrer Nutzlast oder ihrer Header.
Wenn Sie Spring Integration Java DSL verwenden und die clientId
per Nachrichtenkopf übertragen möchten, können Sie enrichHeader
Transformer verwenden. Wenn es mit einer HeaderEnricherSpec
geliefert wird, kann es eine Funktion akzeptieren, die dynamisch bestimmten Wert für den angegebenen Header zurückgibt. Ab Ihren Anwendungsfall könnte dies wie folgt aussehen:
return IntegrationFlows
.from(/*ftp source*/)
.enrichHeaders(e -> e.headerFunction("clientId", this::deriveClientId))
./*split, aggregate, etc the file according to clientId*/
, wo deriveClientId
Methode eine Art sein könnte:
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
Header von FTP-Nachrichtenquelle vorgesehen ist)
Wenn Sie auf die Kopfzeile clientId
irgendwo im Downstream-Flow zugreifen müssen, können Sie es genauso wie den oben genannten Dateinamen tun:
String clientId = message.getHeaders().get("clientId", String.class);
Aber stellen Sie sicher, dass die message
immer noch solche Header enthält, wie es irgendwo zwischen den Zwischenabläufen verloren gegangen sein könnte. Dies kann passieren, wenn Sie eine Nachricht irgendwann manuell erstellen und weiterleiten. Um alle Header zu verlieren nicht aus der vorhergehenden Nachricht, die Sie sie beim Bau kopieren:
Message<PayloadType> newMessage = MessageBuilder
.withPayload(payloadValue)
.copyHeaders(precedingMessage.getHeaders())
.build();
Bitte beachten Sie, dass Nachrichten-Header im Frühjahr Integration unveränderlich ist. Es bedeutet, dass Sie nicht einfach eine Kopfzeile der vorhandenen Nachricht hinzufügen oder ändern können. Sie sollten eine neue Nachricht erstellen oder HeaderEnricher
für diesen Zweck verwenden. Beispiele für beide Ansätze sind oben dargestellt.