1. Frage:Camel - Inhalt enricher: anreichern() vs pollEnrich()
Ich bin wirklich nicht in der Lage, den Unterschied zwischen enrich()
und pollEnrich()
zu verstehen. Vielleicht sind die Begriffe, die Camel benutzt, nicht so toll.
Ich lese hier: http://camel.apache.org/content-enricher.html
Inhalt Anreicherung mit dem Anreicherungs-DSL Element
Kamel mit zwei Arten von Inhalten enricher
- bereichern
- pollEnrich im DSL kommt
Anreicher verwendet einen Producer, um die zusätzlichen Daten zu erhalten. Es wird normalerweise für Request-Reply-Messaging verwendet, um beispielsweise einen externen Web-Service aufzurufen. pollEnrich verwendet dagegen einen Polling-Consumer, um die zusätzlichen Daten zu zu erhalten. Es wird normalerweise für die Nachrichtenmeldung verwendet, um beispielsweise eine Datei zu lesen oder eine FTP-Datei herunterzuladen.
Ich verstehe nicht, was der Unterschied ist. Beide scheinen die zusätzlichen Daten (Web-Service-Antwort, FTP-Datei) zu erhalten, indem sie sie verbrauchen. Warum sagen sie also, dass die Antwort des Web-Service von einem "Produzenten" stammt?
2. Frage:
In der "Camel in Aktion" Buch p. 72 sagen sie:
Enrich und pollEnrich keine Informationen in dem aktuellen Wechsel
Weder bereichern noch pollEnrich keine Informationen nutzen können aus dem aktuellen Wechsel zugreifen können. Das bedeutet zum Beispiel, dass Sie nicht einen Dateinamen Header auf der Börse für pollEnrich zu wählen Sie eine bestimmte Datei speichern können. Dies kann sich in Zukunft ändern, wenn das Team von Camel eine Lösung finden kann.
jedoch sie ein Codebeispiel ähnlich die folgenden geben, eine Aggregationsstrategie für die Umsetzung:
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 diesem Beispiel ich, dass sie Zugang sehen müssen die Exchange original
, ist es nicht der „aktuelle Wechsel "? Wenn nicht, welchen Austausch stellt dann der "ursprüngliche Austausch" dar? Und was meinen sie mit dem "aktuellen Austausch"? Hier