2017-01-20 5 views
0

Ich habe zwei EventHandlers registriert über DS (deklarative Dienste). Jetzt gibt es einen weiteren DS-Dienst, der EventAdmin.sendEvent() aufruft. Es passiert, dass nur einer der EventHandlers das Ereignis empfängt, da einer von ihnen nicht bereit zu sein scheint, wenn das Ereignis ausgelöst wird. Wenn die zweite EventHandler verfügbar wird, ist es daher zu spät, da das Ereignis bereits verbraucht ist. Beide EventHandlers haben immediate=true in der @Component Annotation festgelegt.DS registriert EventHandler vermisst Ereignis

Gibt es eine "elegante" Möglichkeit, dieses Szenario zu lösen?

Antwort

0

Dies ist nur ein Timing-Problem. Nicht alle Verbraucher sind bereit, wenn der Produzent produziert. Der Zweck von Event Admin besteht darin, die Ereignisproduzenten von den Konsumenten zu entkoppeln. Wenn Sie jedoch sicherstellen müssen, dass alle Verbraucher alle Ereignisse sehen, müssen Sie entweder sicherstellen, dass alle Verbraucher bereit sind, bevor ein Produzent produziert, oder einen anderen Mechanismus auswählen, der Ereignisse aus der Vergangenheit an neu ankommende Verbraucher liefern kann.

+0

Danke, Entkopplung wäre hier toll gewesen, aber die Erinnerung an vergangene Ereignisse fügt der Laufzeit zu viel Komplexität hinzu ... Ich werde zu einer anderen Lösung wechseln. –