vertx rx java:eventbus订户取消订阅的原因

hs1rzwqc  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(310)

我使用vertx和rxjava。
我有一个verticle订阅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 电话)

km0tfn4u

km0tfn4u1#

问题似乎是以前的代码 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(...);
                 }
               })

相关问题