Vertx Rx-Java:取消订阅eventBus订户的原因

时间:2018-12-06 23:42:45

标签: java rx-java vert.x

我正在将vertx与rx-java一起使用。

我有一个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错误。

为什么消费者也从其也在听的特定地址中自动取消订阅?

据我了解:如果请求失败并出现错误或超时,则不应导致取消订阅,因此我并不十分了解那会导致这种行为。(我没有任何明确的{{ 1}}个电话)

1 个答案:

答案 0 :(得分:1)

问题似乎是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(...);
                 }
               })