Disgregatori - EventHandlers non invocate
-
25-10-2019 - |
Soluzione
Ogni gestore di eventi deve essere eseguito nel proprio thread che l'uscita solito fino a spegnere il disgregatore. Dal momento che si sta utilizzando un singolo esecutore filettato, solo il primo gestore di eventi che accade per l'esecuzione potrà mai funzionare. (I negozi di classe Disruptor ogni gestore in un HashMap in modo da quale gestore si snoda in esecuzione variano a)
Se si passa a un cachedThreadPool si dovrebbe trovare tutto inizia in esecuzione. Non avrete bisogno di fare qualsiasi gestione dei numeri di sequenza perché è tutto gestito dal EventProcessor che i set di classe Disruptor e gestisce per voi. Proprio l'elaborazione di ogni evento che si ottiene è esattamente a destra.
Altri suggerimenti
È necessario assicurarsi che il proprio searchTermMatchingHandler sta aggiornando il suo numero di sequenza dopo che elabora l'evento. I EventHandlers più a valle (appendStatusHandler, updatePriceHandler, persistUpdatesHandler) saranno ispezionando il numero di sequenza searchTermMatchingHandler per vedere quali eventi possono prendere fuori dal buffer circolare.
Ho avuto lo stesso problema, ma era perché ero istanziare il Disruptor utilizzando Primavera (Java config) ed è stato istanziare l'esecutore con lo stesso metodo @Bean come il disgregatore.
I risolto il problema istanziando dell'Executor in un metodo @Bean separata.