Ist es möglich, um sicherzustellen, dass eindeutige Nachrichten werden in einem rabbitmq Warteschlange?
Grundsätzlich meine Konsumenten werden Produzenten. Wir bekommen einen ersten Datensatz und es wird an die Warteschlange gesendet. Ein Verbraucher nimmt ein Element und Prozesse, die Sie von diesem Punkt aus gibt es 3 Möglichkeiten:
- Daten ist gut und bekommt, ein 'guter' queue für Speicher -
- Daten ist schlecht und verworfen
- Daten ist nicht gut(noch) schlechte(noch nicht) so dass die Daten aufgebrochen, in kleinere Teile und schickte Sie zurück in die Warteschlange zur weiteren Verarbeitung.
Mein problem ist, mit Schritt 3, weil die Warteschlange wächst sehr schnell zunächst möglich, dass ein Teil der Daten wird zerlegt in einen Teil, das ist dupliziert in der Warteschlange und die Verbraucher auch weiterhin, Sie zu verarbeiten und am Ende in einer Endlosschleife.
Ich denke, die Art und Weise, um zu verhindern, dass gegen diese ist, um zu verhindern, dass Duplikate in der Warteschlange. Ich kann dies nicht auf der client-Seite, da im Laufe einer Stunde vielleicht habe ich viele Kerne Umgang mit Milliarden von Daten Punkte(von jedem client Scannen Sie es vor dem Absenden würde mich verlangsamen zu viel). Ich denke, dass dies getan werden muss, um auf der server-Seite, sondern, wie ich bereits erwähnt habe, die Daten sind ziemlich groß und ich weiß nicht, wie effizient sicherzustellen, dass keine Duplikate.
Ich vielleicht Fragen, die unmöglich, aber dachte, ich würde give it a shot. Irgendwelche Ideen würde sehr geschätzt werden.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den Kern des Problems scheint zu sein:
Können Sie den Fokus auf die Einzigartigkeit Ihrer Elemente in der Warteschlange alles, was Sie wollen, aber das Problem oben ist, wo Sie Ihre Bemühungen konzentrieren, IMO. Ein Weg, um zu verhindern, dass unendliche Schleife sein könnte, um eine "besucht" - bit in der Nachricht-payload, die festgelegt ist, von den Konsumenten, bevor Sie erneut in die Warteschlange der broken-down-Element.
Eine andere option wäre, haben die Verbraucher erneut in die Warteschlange zurück, um eine spezielle Warteschlange behandelt wird, leicht unterschiedlich, um zu verhindern, dass unendliche Schleife. So oder so, Sie angreifen sollten, das Problem durch den Umgang mit es als zentralen Teil Ihrer Anwendung Strategie, anstatt ein feature des messaging-system, um Schritt um ihn herum.
Ich denke, selbst wenn man das könnte das Problem beheben, nicht das senden von Duplikaten der Warteschlange, werden Sie früher oder später dieses Problem:
Im Grunde sieht es so aus, senden Sie eine Anfrage an rabbitmq, rabbitmq antwortet mit einem ACK, aber für 1 oder anderen Grund, Ihre Verbraucher oder Produzent nicht erhalten dieses ACK. Rabbitmq hat keine Möglichkeit zu wissen, die ack wurde nicht empfangen und Ihr Produzent wird am Ende die erneute senden der Nachricht niemals empfangen eines ack.
Es ist ein Schmerz zu behandeln, doppelte Botschaften, besonders in Anwendungen, wo die messaging wird verwendet, als eine Art RPC, aber es sieht aus wie das ist unvermeidlich bei dieser Art des messaging-Architektur.