当前位置: 首页 > 面试题库 >

RabbitMQ Java客户端停止使用消息

仉运乾
2023-03-14
问题内容

我的应用程序使用RabbitMQ的一些消息并进行处理。我大约有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测功机正在重新启动,这将断开您的连接。Heroku测功机会定期重新启动。如果您的测功机无法正常重启,则可能需要调查原因。
  • 您的Heroku测功机之一存在网络问题(在这种情况下,它可能会在没有您干预的情况下自行重启)。

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



 类似资料:
  • 我的应用程序使用来自RabbitMQ的一些消息并对其进行处理。我有大约10个队列,每个队列最多有10个消费者(线程)。我有5次预回迁。我正在Heroku中使用CloudAMQP插件(RabbitMQ作为服务)运行安装程序。 我使用默认心跳和连接超时设置(60秒)运行。 我的java应用程序是一个使用sping-Rabbit库的Spring Boot应用程序。 版本: 问题是对于一个特定队列的消费者

  • 我有以下情况:我使用Kafka模板,以便与Kafka交互,但我希望能够以编程方式防止Kafka客户端从某个主题读取消息,但仍然能够产生到其他主题。有没有办法实现这一点?

  • Twilio布道者们好, 我们使用Twilio模块,可编程聊天,并使用Javascript客户端和Twilio.api,C#服务器API。 我们希望用户看到特定信道的信道和消息,但需要有条件地阻止他们发送消息。 我们可以禁用UI元素,但智能用户仍然能够访问Twilio客户端,并发送消息。

  • 我正在节点上使用stomp客户端。js与ActiveMQ。当前,生产者将消息推送到队列中,如果客户端(消费者)已连接,则它会使用消息。若客户端未连接,则消息在队列中挂起,直到或除非连接了某个消费者。 在我的例子中,消费者执行的每个操作都很昂贵,最多需要2个小时。我想消费一条消息,然后停止消费队列中的消息,直到该操作完成。目前,一旦消息被推入队列,客户端就会自动从队列中提取所有消息。我想要的是提取一

  • 我试图使用Netty构建一个简单的TCP客户端-服务器应用程序。开始时,我通过SocketChannel从客户端发送消息,方式如下: 所有的消息都被服务器收到了,但是当我想把响应写回客户端时,我发现为了得到客户端的响应,它需要通过引导程序发送消息,并定义将读取响应的Inoundhandler(也许有人知道另一种方法?)当我试图通过引导程序发送消息时,我使用以下代码: 但是通过这种方式,服务器根本没

  • 1. 创建 Maven 工程 服务端部署完毕后,我们可以新建一个 Maven 工程使用 SOFARegistry 提供的服务。首先新建一个 Maven 工程,然后引入如下依赖: <dependency> <groupId>com.alipay.sofa</groupId> <artifactId>registry-client-all</artifactId> <versi

  • 发起请求 让我们从导入aiohttp模块开始: import aiohttp 好啦,我们来尝试获取一个web页面。比如我们来获取下GitHub的时间轴。 async with aiohttp.ClientSession() as session: async with session.get('https://api.github.com/events') as resp:

  • 安装命令行工具 使用命令行工具 使用Python SDK 使用Web控制台