Vertx Rx-Java: причины отказа подписчика на eventBus - PullRequest
0 голосов
/ 07 декабря 2018

Я использую vertx с rx-java.

У меня есть статья, которая подписывается на события на eventBus с конкретными адресами:

eventBus.localConsumer(some_addres)
        .toObservable()
        .subscribe(message -> {
                     ...
                     message.reply(...);
                   })
... same for other addresses...

А другие статьи отправляют события, используя:

eventBus.rxSend(some_address, message, new DeployOptions().setSendTimeout(60000));

Версии создаются через RxHelper.deployVerticle.

И все работало нормально, однако через некоторое время один из адресов отписался, и все запросы на это событие теперь не выполняются с ReplyException: No handlers for address some_ddressошибка, все остальные адреса все еще подписаны.

Я не вижу никаких ошибок vertx в журналах.

В чем может быть причина того, что потребитель автоматически отписался от адреса, который он слушал тоже?

Насколько я понимаю: если запрос завершается неудачно с ошибкой или тайм-аутом, это не должно приводить к отмене подписки, поэтому я не совсем понимаю, что может привести к такому поведению. (У меня нетлюбые явные unsubscribe звонки вообще)

1 Ответ

0 голосов
/ 10 декабря 2018

Оказалось, что проблема заключалась в том, что код до message.reply иногда вызывал исключение:

eventBus.localConsumer(some_addres)
    .toObservable()
    .subscribe(message -> {
                 ... <-- exception here
                 message.reply(...);
               })

Простое исправление:

    eventBus.localConsumer(some_addres)
    .toObservable()
    .subscribe(message -> {
                 try {
                     ... <-- exception here
                     message.reply(...);
                 } catch (Exception e) {
                     ...handle exception...
                    message.error(...);
                 }
               })
...