2013-09-30 9 views
6

1 ° DOMANDA:Camel - arricchimento di contenuti: arricchire() vs pollEnrich()

io non sono in grado di capire veramente la differenza tra enrich() e pollEnrich(). Forse i termini usati da Camel non sono così grandi.

che ho letto qui: http://camel.apache.org/content-enricher.html

arricchimento dei contenuti utilizzando l'elemento Enrich DSL

cammello viene fornito con due gusti di arricchimento contenuti nel DSL

  • arricchire
  • pollEnrich

arricchisce utilizza un produttore per ottenere i dati aggiuntivi. Di solito è utilizzato per la messaggistica di richiesta di risposta, ad esempio per richiamare un servizio Web esterno . pollEnrich d'altra parte utilizza un consumatore Polling su per ottenere i dati aggiuntivi. Viene solitamente utilizzato per messaggi di evento , ad esempio per leggere un file o scaricare un file FTP.

Non capisco qual è la differenza. Entrambi sembrano ottenere i dati aggiuntivi (risposta al servizio Web, file FTP) consumandolo. Quindi perché dicono che ottenere la risposta del servizio Web è fatto da un "produttore"?

DOMANDA 2 °:

Nella "Camel in azione" libro p. 72 dicono:

arricchire e pollEnrich non possono accedere alle informazioni nel cambio

Né arricchire né pollEnrich può sfruttare qualsiasi informazione dallo scambio corrente. Ciò significa, ad esempio, che non è possibile memorizzare un'intestazione del nome file nello scambio per pollEnrich da utilizzare per selezionare un file specifico. Questo potrebbe cambiare in futuro se il team Camel può trovare una soluzione.

Tuttavia danno un esempio di codice simile di seguito, per attuare una strategia di aggregazione:

public class ExampleAggregationStrategy implements AggregationStrategy { 

    public Exchange aggregate(Exchange original, Exchange resource) { 
     Object originalBody = original.getIn().getBody(); 
     Object resourceResponse = resource.getIn().getBody(); 
     Object mergeResult = ... // combine original body and resource response 
     if (original.getPattern().isOutCapable()) { 
      original.getOut().setBody(mergeResult); 
     } else { 
      original.getIn().setBody(mergeResult); 
     } 
     return original; 
    } 

} 

In questo esempio vedere che hanno accesso al Exchange original, non è il "cambio corrente "? Se no, allora quale scambio rappresenta lo "scambio originale"? E cosa intendono con "lo scambio corrente"?

risposta

12

Ecco la differenza:

  • enrich assume che si desidera utilizzare uno scambio in entrata come parametro a una richiesta di un altro servizio.ad esempio, il tuo Exchange in arrivo potrebbe essere un ID utente, ma hai davvero bisogno dell'intero oggetto Utente, così puoi fare enrich passando l'userID a un servizio REST che restituisce l'oggetto Utente che diventa Exchange, ecc.

  • pollEnrich presuppone che lo scambio in entrata sia un semplice trigger che indica a un PollingConsumer di cercare dati e creare un Exchange (ignorando il contenuto dello scambio in entrata). Ad esempio, potresti avere un timer o un altro evento del processo aziendale che richiede il prelievo di un file per l'elaborazione, ecc. Detto che i dati di Exchange in entrata NON sono usati per configurare dinamicamente il PollingConsumer ... per questo viene utilizzato solo l'URI.

Detto questo, come di Camel 2.12, c'è un'opzione per specificare una strategia di aggregazione per combinare le Borse/restituiti in entrata sia per enrich e pollEnrich

Vedere this unit test per un esempio di pollEnrich con un'aggregazione strategia