Java 如何处理RMQ连接丢失?

Java 如何处理RMQ连接丢失?,java,scala,rabbitmq,connection,rmq,Java,Scala,Rabbitmq,Connection,Rmq,我们在Scala中使用JavaRMQ客户端,在开发环境中遇到了一些问题。我们制定了这一应急策略: def addConnectionShutdownListener(connection: Connection): Unit ={ connection.addShutdownListener { cause: ShutdownSignalException => logger.error(s"Error on RMQ connection: ${cause.g

我们在Scala中使用JavaRMQ客户端,在开发环境中遇到了一些问题。我们制定了这一应急策略:

def addConnectionShutdownListener(connection: Connection): Unit ={
    connection.addShutdownListener { cause: ShutdownSignalException =>
      logger.error(s"Error on RMQ connection: ${cause.getMessage}", cause)

      if (exitOnFail) {
        logger.info("Terminating process with RMQ consumer is shut down")

        System.exit(1)
      }
      else if (retryOnFail) {
        logger.info(s"Retrying to connect")

        retryCreatingConnection(1)
      }
    }
  }

  addConnectionShutdownListener(rmqConnection)
以类似的方式,我添加了通道连接关闭侦听器

因此,我们使用了两种策略(并通过配置进行修改)

  • 失败时退出
  • 失败后重试
我设置了失败退出策略,有时它可以正常工作。当错误发生时,我在日志上看到这一行,终止RMQ使用者的进程时,该行被关闭,服务被正确地重新启动(kubernetes pod被关闭,它再次自动启动)。我禁用了RMQ自动恢复,因为它根本不起作用


问题是有时一些队列没有使用者,消息正在排队并挂起,但日志中没有此错误消息。测试它真的很难,因为我不知道在我们的开发环境中发生了什么情况

会发生什么? 有没有更好的方法来处理连接丢失,或者更准确地说,处理消费者以某种方式从队列中分离的情况

提前感谢,


Amer

“问题是有时一些队列没有消费者,消息正在排队并挂起,但日志中没有此错误消息”可能根本没有消费者?您是否检查了RMQ监控队列中是否存在某些活动?也许您的devk8s没有正确配置以启动相应的使用者?毕竟,我倾向于这个问题不是在连接/通道处理程序中,而是在其他一些地方。也许您应该向dev rmq添加一些监视,并检测queuesThanks中的活动。这是我们确定的。我只是想看看是否有人面临一些已知的问题。。。