2015-10-30 2 views
0

В разрушителе (версия 3.3.2) каждое событие является Runnable (поскольку EventProcessor расширяет исполняемый файл).Исключения для обработки Java Disruptor

Я пишу приложение, которое всякий раз, когда EventHandler выдает исключение, класс, который вызывает disruptor.start(), должен поймать исключение и затем отреагировать.

Теперь, если EventProcessor был бы Callable, это было бы легко.

Есть ли другой способ в Disruptor распространять исключение?

ответ

0

Разрушитель предоставляет ExceptionHandler, предназначенный для решения этой проблемы.

1

Я решил проблему, передав интерфейс реализации EventHandler, , как предложено в книге Дуга Ли. Исключение устанавливается в LinkedList, а в конце вызова метода я извлекаю последний элемент в списке. Код примера:

final LinkedList<Throwable> listExceptions = new LinkedList<Throwable>(); 

    MyClassWithDisruptor at = MyClassWithDisruptor.getInstance(); 
    at.send(message, transport, conf, new AuditExceptionHandler() { 

     @Override 
     public void handleException(final Throwable e) { 
      e.printStackTrace(); 

     } 

     @Override 
     public void setException(final Exception e) throws AuditTrailException { 
      listExceptions.add(e); 

     } 
    });