Mein Setup:
Ich habe eine Nachricht Daemon ActiveMQ mit denen JSON-Nachrichten konsumieren.
Der Herausgeber von JSON-Nachrichten fügt type
header mit Wert hinzu, z. B. com.example.Foo
welcher der Typ der JSON-Nachricht ist. Ich benutze dies um json in pojo zu verwandeln.Frühling Integration - Ausnahmen und Wiederholungen
Frühling config:
Sobald die Nachricht empfangen wird, das sind die Schritte, die sie durchgeht:
1. Transformator: Wandelt json
2. Payload Typ Router Pojo: Basierend auf den Typ des pojo , leitet den Pojo zu einem geeigneten Dienstaktivator.
3. Serviceaktivator: Verarbeitet die Nachricht.
<int:chain input-channel="transformerChannel">
<int:transformer id="jsonToPojoTransformer" ref="JsonToPojoTransformer" method="transform" />
<int:payload-type-router default-output-channel="defaultChannel">
<int:mapping type="com.example.Foo" channel="fooHandlerChannel"/>
<int:mapping type="com.example.Bar" channel="barHandlerChannel"/>
</int:payload-type-router>
</int:chain>
<int:service-activator input-channel="fooHandlerChannel" ref="fooHandler" method="onMessage"/>
<int:service-activator input-channel="barHandlerChannel" ref="barHandler" method="onMessage"/>
Service-Aktivator Definition:
public class FooHandler {
public void onMessage(Foo foo) {...}
}
Problem:
Ich möchte wissen, wie die Nachrichten-Header in den Dienst Aktivator zuzugreifen. Es scheint, als hätte der Dienstaktivator keinen Zugriff auf die Nachrichtenheader, da der Transformer ein Pojo zurückgibt.
Nehmen wir an, der Service-Aktivator kann aus irgendeinem Grund keinen Downstream-Rest-Service aufrufen. Ich möchte die Verarbeitung dieser Nachricht jetzt überspringen und diese Nachricht später erneut versuchen. Oder sagen wir, es gab eine Ausnahme bei der Verarbeitung dieser Nachricht. Ich möchte die Verarbeitung dieser Nachricht nach einiger Zeit wiederholen. Wie erreiche ich das?
--edit--
entfernt Details Frage Größe wie pro Artem Kommentar zu reduzieren.
Mein Dienstaktivator wurde definiert als 'public void fooHandler (Foo foo) {...}'. Daher habe ich mich gefragt, wie man auf die Header zugreift.Ich habe es in 'public void fooHandler (Nachricht > Nachricht) {...}' geändert. Jetzt hat die Nutzlast eine Instanz von "Foo" und die Nachrichtenheader sind verfügbar. Ich war mir nicht bewusst, dass was Transformator zurückkehrt auch in "Message" verpackt ist. Und ich fügte weitere Details hinzu, um zu erklären, warum ich tat, was ich tat. Viele Male fragen Menschen, warum ich eine bestimmte Art und Weise gewählt habe, etwas zu tun. Daher die ausführliche lange Nachricht. – shravanp
OK. Vielleicht ist das nur der Effekt des Abends :-). Ist meine Antwort nützlich oder brauchen Sie noch etwas? –
Ich versuche, auf der Verbraucherseite Frühjahrsdokumentation über das TX zu finden. Kannst du mich auf die richtige Dokumentation hinweisen? Ich bin immer noch auf der Suche nach der massiven Referenz für die Integration von Federn. – shravanp