Тайм-аут прерывателя LMAX для EventHandler onEvent

У меня есть кольцевой буфер и обработчик событий. Это используется в качестве входящего буфера сервера обмена сообщениями.

Внутри моего чётного обработчика он выполняет некоторые вызовы службы AMQP, а иногда из-за того, что этот вызов ожидает без таймаута (ошибка в библиотеке протоколов подчеркивания, которая вызывает службы AMQP). И с 2000tps, это приводит мой кольцевой буфер размером 4096 к полному в мгновение ока. Потому что кажется, что вызывающий поток onEvent не возвращается из этого метода и ждет бесконечно внутри onEvent() из-за вышеупомянутого факта.

На данный момент создание тайм-аута для этого вызова не представляется возможным.

Вопрос::

Когда механизм прерывания вызывает onEvent(), можем ли мы установить тайм-аут на уровень создания буфера или какой-то другой уровень, где у него будет тайм-аут на вызов метода onEvent().

Я использую разрушитель 3.3.2 с BlockingWaitStrategy.

1 ответ

Разрушитель не поддерживает тайм-ауты на обработчиках событий. Однако я могу придумать несколько возможных способов обойти это.

Самым простым изменением будет завершение вашего проблемного вызова AMQP в будущем, на который вы звоните Future#get(timeout, TimeUnit),

Существуют и другие варианты отправки длительной задачи отдельному разрушителю для обработки или записи будущего в другое поле события, а также наличие второго события EventHandler.

Другие вопросы по тегам