avec Spring Nuage DataFlow 1.3.0.M2 avec Spring Nuage Entrées flux Celsius.M1.Spring Nuage DataFlow: Obtenir payload Liste <Map>
J'ai deux processeurs. D'abord produit un List<Map>
qui est censé être consommé par l'autre. Voici un code simplifié.
// Processor 1
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
// Note: had Object instead of List<> as the return, hoped perhaps using a
// specific type would help, but no difference.
public List<Map<String, Object>> process(final @Payload MyPojo payload) {
final List<Map<String, Object>> results = worker.doWork(payload);
LOG.debug("Returning " + results.size() + " objects");
return results;
}
// Processor 2
@StreamListener(Processor.INPUT)
@SendTo(Processor.OUTPUT)
public Object process(final @Payload List<Map<String, Object>> payload) {
LOG.debug("Received " + payload.size() + " objects");
final List<Map<String, Object>> results = worker.moreWork(payload);
return results;
}
Je ces deux processeurs déployez dans un pipeline en utilisant le shell SCDF:
<source> | otherProcessors | processor1 | processor2 | log
Le message de débogage pour processeur 1 dit qu'il a 2 objets dans la liste. Le message de débogage du processeur 2 indique qu'il a reçu 40 objets (chaque carte a 20 paires clé = valeur) - il apparaît que les deux cartes ont été aplaties en une liste de paires clé = valeur.
Je journalisation de débogage activé pour org.spring.integration
et le message semble avoir une liste de format de cartes (ce qui est du processeur 2):
preSend on channel 'input', message: GenericMessage
[payload=[{"m1key1":"val1","m1key2":"val2",...,"m1key20":"val20"},
{"m2key1":"val1","m2key2":"val2",...,"m2key20":"val20"}], headers={..}]
Je voudrais Processeur 2 pour recevoir les 2 cartes produites par Processeur 1. Je me demande si c'est quelque chose lié aux types génériques. Quelqu'un peut-il me diriger vers la configuration pour y arriver?
---- Mise à jour pour les commentaires de Artem ----
processeur 1 a ceci dans son fichier application.properties
:
spring.cloud.stream.bindings.output.content-type=application/json
J'avais aussi essayé de modifier la définition de flux comme cela, mais il n » ai pas t semblent faire une différence:
<source> | otherProcessors | processor1 --outputType=application/json | processor2 --inputType=application/json | log
Vous savez que cela ne ressemble pas à JSON, mais bien comme 'GenericMessage.toString()'. Cela vous dérangerait-il de partager les «en-têtes» que vous avez là sur le sujet? Au moins 'contentType' –
Et oui, quelle est la configuration' input/output' que vous avez sur ces processeurs? Je veux dire "contraignant" réglage –
Mise à jour post pour répondre aux questions, Artem, merci. – user944849