2016-03-22 10 views
2

Dies ist eine sehr allgemeine Frage zu EventBus. Zeigt der EventBus ein FIFO- oder LIFO-Verhalten? Ich verwende den EventBus als "Warteschlangen" -Mechanismus für Java-Ereignisse und sehe das LIFO-Verhalten, wenn ein einzelner Publisher Ereignisse schneller an den EventBus sendet, als der Abonnent verarbeiten kann.Guava EventBus - FIFO oder LIFO?

+0

Bitte seien Sie detaillierter über die Umstände, die Sie sehen. –

+0

Dies sind die 3 Komponenten, die ich habe - einfacher Event-Bus, ein Herausgeber, der die Ereignisse veröffentlicht, die den aktuellen Zeitstempel enthalten, und einen Abonnenten. Der Herausgeber erstellt das Ereignis mit dem aktuellen Zeitstempel und stellt es dann auf den Ereignisbus, und die Abonnenten-Ereignisbehandlungsfunktion druckt nur den Zeitstempel des Ereignisses. Was ich sehe ist, dass Zeitstempel in umgekehrter Reihenfolge gedruckt werden. –

+0

Beschreiben Sie Ihren Code nicht. Poste ein minimales Beispiel, das das Problem reproduziert. –

Antwort

1

EventBus doc sagt, dass die Nachrichten an alle Handler gesendet werden, aber es gibt nichts über ihre Reihenfolge. Ich wette also nicht, dass die spezifische Reihenfolge erhalten bleibt. Auch wenn jetzt die Bestellung ohne explizite Information in der Dokumentation erhalten bleibt, kann sich dies in Zukunft ändern, also sollten Sie sich nicht auf diesen Verdacht verlassen.

Insbesondere, wenn Sie eine asynchrone Implementierung verwenden, dann haben Sie sicherlich keine Garantie für die Bestellung.

Wenn Sie einige Nachrichten senden und ihre Bestellung behalten möchten, können Sie andere Lösungen verwenden, die Garantie wie Apache Kafka garantieren.

+0

danke für die Antwort. –

+0

@annadobrowolska - Im Zusammenhang mit dieser Frage versuche ich, die Unterschiede in den Event-Bus-Implementierungen mit Guava Eventbus und Kafka zu verstehen. Lassen Sie mich wissen, wenn Sie Links/Gedanken haben. Vielen Dank –