Vert.x как бороться с отсутствующим обработчиком

Первоначально вопрос был задан здесь на форуме - https://groups.google.com/forum/#!topic/vertx/jdNRWlE6v4Y

Я только что прочитал эту ветку, в которой обсуждаются проблемы с отправкой сообщений по шине событий, где нет зарегистрированного обработчика для указанного адреса. Мне просто любопытно, как люди справляются с этим сценарием. Рекомендуется ли использовать ручной таймер? Утечка памяти при таком подходе со временем?

Исходя из узла, я видел несколько подходов к такого рода проблемам:

  1. Немедленно выбросить исключение, если обработчик не найден
  2. Обратный вызов с ошибкой для очистки прослушивателя ответа
  3. Обработчик Catchall, в который вы можете поместить некоторый код, чтобы решить, как самостоятельно обрабатывать необработанные запросы

Я открыт для этих или любых других методов, я просто хочу быть уверен, что поступаю правильно.

Для этого есть проблема, но я не знаю, стоит поискать исправление для текущей стабильной версии (v1.3) или подождать v2.0 (я не видел какой-либо временной шкалы для v2.0, но, похоже, в репозиторий git вокруг него).

Любое руководство будет очень признательно.


person jckdnk111    schedule 04.04.2013    source источник


Ответы (1)


В документации буквально сказано:

«Если вы отправляете сообщение с указанием обработчика ответа, а ответ так и не приходит, то по умолчанию у вас остается обработчик, который никогда не отменяется».

Для меня это тоже ужасное поведение по умолчанию, но, к счастью, начиная с Vert.x 2.0 у нас есть способ отправки с таймаутом, который выглядит так же в 100% случаев.

Пример:

eb.sendWithTimeout("test.address", "This is a message", 1000, new Handler<AsyncResult<Message<String>>>() {
    public void handle(AsyncResult<Message<String>> result) {
        if (result.succeeded()) {
            System.out.println("I received a reply " + message.body);
        } else {

            System.err.println("No reply was received before the 1 second timeout!");
        }
    }
});
person sscarduzio    schedule 05.07.2014
comment
Спасибо за помощь, но этому вопросу больше года :-) Кроме того, команда vert.x четко заявила, что все вопросы следует направлять непосредственно на их форум групп Google (где на этот вопрос давным-давно был дан ответ). - person jckdnk111; 07.07.2014