【问题标题】:RabbitMQPublisher sometimes fails to recoverRabbitMQPublisher 有时无法恢复
【发布时间】:2022-07-29 17:28:54
【问题描述】:

我正在使用带有 RabbitMQ 客户端的 Vertx 4.2.1,我只是注意到有时当 rabbitMQ 客户端断开连接并重新连接时,RabbitMQPublisher 无法再发布消息。这意味着我对 publisherClient.rxPublish(...) 的调用永远不会完成,也不会引发任何错误。

我的客户端设置是:

new RabbitMQOptions().setAutomaticRecoveryEnabled(true)
                    .setReconnectAttempts(0)
                    .setNetworkRecoveryInterval(1000L);

是否有一些设置或什么可以防止这种情况发生?

目前,我正在尝试使用以下解决方法解决此问题:

publisherClient.rxPublish(......)
                    .timeout(5, TimeUnit.SECONDS)
                    .doOnError(err -> {
                        if (err instanceof TimeoutException) {
                            LOG.warn("Publisher did not recover, so it will be restarted");
                            publisherClient.restart();
                        }
                    })
                    .retry(1L, err -> err instanceof TimeoutException)

关于这个问题的一个小更新: 这似乎是可重现的,如果我们在与 RabbitMQ 的连接断开时尝试发布消息,即使连接恢复并且一切似乎都正常,我们稍后也无法发布任何消息。对 publisherClient.rxPublish(......) 的调用永远不会完成

感谢您的帮助

【问题讨论】:

    标签: rabbitmq vert.x


    【解决方案1】:

    你如何测试这个?您如何创建要发布到的交换和队列?

    如果服务器返回时对象不存在,那么所有消息都会静默消失。 为了创建对象,您需要使用已建立的连接回调,目前无法通过 Rx 包装器访问这些回调。

    【讨论】:

    • 我的后端连接到 RabbitMQ,一旦我停止 rabbitMQ 服务器,我会向我的后端发送一些请求,这些请求应该转发到队列。最后,我再次启动rabbitMQ,一旦启动,我尝试再次发送一些请求,但这些请求永远不会在RabbitMQ中转发,并且控制台中没有错误,rxPublish永远不会解决并保持阻塞。我在 rabbitMQ 客户端第一次连接时创建队列,我的队列是持久的和仲裁类型的,因此它们在连接丢失时仍然存在。
    【解决方案2】:

    试试这个:

    publisherClient.rxPublish(......)
      .timeout(5, TimeUnit.SECONDS)
      .doOnError(err -> {
          if (err instanceof TimeoutException) {
              LOG.warn("Publisher did not recover, so it will be restarted");
              publisherClient.restart();
          }
      })
      .retry(1L, err -> err instanceof TimeoutException)
      .subscribe()
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多