2013-09-30 14 views
6

1ST PYTANIE:Camel - zawartość enricher: wzbogacić() vs pollEnrich()

nie jestem w stanie naprawdę zrozumieć różnicę między enrich() i pollEnrich(). Być może określenia, których używa Camel, nie są tak wspaniałe.

czytałem tutaj: http://camel.apache.org/content-enricher.html

Content wzbogacenie przy użyciu elementu Enrich DSL

Camel pochodzi z dwóch smakach zawartości enricher w DSL

  • wzbogacić
  • pollEnrich

Enrich używa producenta, aby uzyskać dodatkowe dane. Zwykle jest to używane do przesyłania komunikatów żądania odpowiedzi, na przykład w celu wywołania zewnętrznej usługi WWW . Z drugiej strony pollEnrich używa An Polling Consumer do , aby uzyskać dodatkowe dane. Jest zwykle używany do przesyłania komunikatów o zdarzeniach , na przykład do odczytu pliku lub pobrania pliku FTP.

Nie rozumiem, na czym polega różnica. Obaj wydają się otrzymywać dodatkowe dane (odpowiedź usługi sieci Web, plik FTP), wykorzystując go. Dlaczego więc twierdzą, że odpowiedź usługi sieciowej została wykonana przez "producenta"?

2ND PYTANIE:

W "Camel w akcji" Książka p. 72 mówią:

wzbogacić i pollEnrich nie może uzyskać dostęp do informacji w bieżącej wymiany

Ani wzbogacić ani pollEnrich może wykorzystać wszelkie informacje z bieżącej wymiany. Oznacza to na przykład, że nie można przechowywać nagłówka pliku na giełdzie dla pollEnrich, aby można go było użyć do wybrania określonego pliku. Może się to zmienić w przyszłości, jeśli zespół Camel znajdzie rozwiązanie.

jednak dają przykład kodu podobnego do następującego, za wdrażanie strategii agregacji:

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; 
    } 

} 

W tym przykładzie widzę, że mają dostęp do Exchange original, nie jest to „bieżący wymiana "? Jeśli nie, to jaka jest wymiana "oryginalnej wymiany"? Co one oznaczają przez "bieżącą wymianę"?

Odpowiedz

12

Oto różnica:

  • enrich zakłada chcesz użyć przychodzące Exchange jako parametr do żądania innej usługi.na przykład przychodząca Exchange może być identyfikatorem użytkownika, ale naprawdę potrzebny jest cały obiekt User, aby można było go wykonać przez przekazanie ID użytkownika do usługi REST, która zwraca obiekt użytkownika, który staje się Exchange itp.

  • pollEnrich zakłada, że ​​przychodzące Exchange jest prostym wyzwalaczem, który nakazuje PollingConsumerowi wyszukanie danych i utworzenie Exchange (ignorując zawartość przychodzącego Exchange). Na przykład można mieć licznik czasu lub inne zdarzenie procesu biznesowego, które wymaga pobrania pliku do przetworzenia itp., Z którego wynika, że ​​przychodzące dane programu Exchange NIE są używane do dynamicznej konfiguracji obiektu PollingConsumer ... do tego celu używany jest tylko identyfikator URI.

Powiedział, że jak Camel 2.12, istnieje możliwość, aby określić strategię agregacji do połączenia przychodzące/zwróconych Wymiany zarówno enrich i pollEnrich

Zobacz this unit test na przykład pollEnrich z agregacją strategia