gpt4 book ai didi

java - RabbitMQ java 客户端停止消费消息

转载 作者:搜寻专家 更新时间:2023-11-01 02:39:04 25 4
gpt4 key购买 nike

我的应用程序使用一些来自 RabbitMQ 的消息并处理它们。我有大约 10 个队列,每个队列最多有 10 个消费者(线程)。我有 5 个预取。我正在使用 CloudAMQP 插件(RabbitMQ 即服务)在 Heroku 中运行我的设置。

我正在使用默认心跳和连接超时设置(60 秒)运行。

我的 java 应用程序是一个使用 spring-rabbit 库的 spring boot 应用程序。

版本:

RabbitMQ 3.5.3 
Erlang 17.5.3
Java 1.8
Spring boot 1.3.2.RELEASE
Spring rabbit 1.5.3.RELEASE

问题是某个特定队列的消费者会在一段时间后停止消费消息。当我重新启动我的 java 应用程序时,一切正常。不过,其他队列正在正常使用。应用程序方面没有错误。在兔子这边的日志流中,我看到了一些条目,比如

= REPORT==== 2016-08-02 15:53:32 UTC ===
closing AMQP connection <SOMETHING> (SOMETHING_ELSE -> SOMETHING_ELSE_ELSE):
{heartbeat_timeout,running}

我无法在本地或在 Heroku 的测试环境中重现。

更新

下面的代码可以在AMQConnection.class中找到

int heartbeat = negotiatedMaxValue(this.requestedHeartbeat,
connTune.getHeartbeat());


private static int negotiatedMaxValue(int clientValue, int serverValue) {
return (clientValue == 0 || serverValue == 0) ?
Math.max(clientValue, serverValue) :
Math.min(clientValue, serverValue);
}

我无法将心跳值增加到 60 秒以上(这是我从服务器获得的值)。

最佳答案

不幸的是,这似乎是一个网络问题。这可能是由于以下几点:

  • CloudAMQP 服务出现了一些问题,正在终止您的连接(不太可能,因为您的其他消费者工作正常)。
  • 您的 CloudAMQP 计划不允许并发连接数量如您所愿。您是否检查过以确保您的计划足够高以支持所有消费者? https://elements.heroku.com/addons/cloudamqp
  • 您与相关消费者的 Heroku dyno 正在重启,这会断开您的连接。 Heroku dynos 定期重启。如果您的测功机无法正常重启,您可能需要调查原因。
  • 您的一个 Heroku dynos 出现网络问题(在这种情况下,它可能会在没有您干预的情况下自行重启)。

强制所有测功机重启的一种方法是运行 $ heroku ps:restart。这将强制 Heroku 重新启动您的 dynos,这通常意味着将它们移动到新的 EC2 主机。如果这是一次性问题,这可能会有所帮助。

关于java - RabbitMQ java 客户端停止消费消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38771664/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com