Ich empfange Nachrichten von einem Dienst (S), der jede einzelne Eigenschaftsänderung für eine Entität als separate Nachricht veröffentlicht. Ein konstruiertes Beispiel würde ein Unternehmen wie diese:Gruppe hat Nachrichten in RabbitMQ empfangen, vorzugsweise mit Spring AMQP?
Person {
id: 123
name: "Something",
address: {...}
}
Wenn Name und Adresse in der gleichen Transaktion aktualisiert werden dann (S) zwei Nachrichten veröffentlichen, PersonNameCorrected
und PersonMoved
. Das Problem ist auf der Empfangsseite, wo ich eine Projektion dieser Person
Entität speichern und jede Eigenschaftsänderung verursacht ein Schreiben in die Datenbank. In diesem Beispiel gäbe es also zwei Schreibvorgänge in der Datenbank, aber wenn ich die Nachrichten für kurze Zeit stapelweise gruppieren und nach ID gruppieren könnte, müsste ich nur einen einzigen Schreibvorgang in der Datenbank durchführen.
Wie geht das normalerweise in RabbitMQ? Bietet Spring AMQP eine einfachere Abstraktion?
Beachten Sie, dass ich kurz auf prefetch geschaut habe, aber ich bin mir nicht sicher, ob dies der richtige Weg ist. Auch Prefetch, wenn ich es richtig verstehe, ist pro Verbindung Basis. Ich versuche, dies auf einer per-Warteschlange Basis zu erreichen, denn wenn Batching (und damit Latenz hinzugefügt) ist der Weg zu gehen möchte ich nicht diese Latenz zu allen Warteschlangen von meinem Dienst verbraucht hinzufügen (aber nur zu diejenigen, die die "Group-by-ID" -Funktionen benötigen.
Danke für die p outer zur Frühlingsintegration. Wenn es nicht zu viel verlangt ist, würden Sie zufällig ein Beispiel kennen, das ich als Kickstarter für meinen Anwendungsfall verwenden könnte? – Johan
Ich habe meine Antwort mit einem Beispiel aktualisiert, das ausreichen sollte, um loszulegen. –
Ich weiß, dass ich SO kurz sein sollte, aber muss sagen, dass das großartig ist, ich hätte keine bessere Antwort verlangen können, also danke :). – Johan