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

一段时间后blpop停止处理队列

林雅畅
2023-03-14
问题内容

在我的组织中,我们有许多Redis工作人员来完成我们的关键任务。通常,一天一次或两次,我们的工人会停止处理队列。

该代码基本上如下所示:

while ($item = $redis->blpop(array('someQueue', 'anotherQueue'), 3600)) {
    someFunction();
}

如果看到的话,就代码而言,发生的事情并不多,但是每隔一段时间,队列就会开始建立,并且工作程序不会从队列中弹出任何项目。为设置超时blpop根本没有用,因为我们假设问题出在Redis客户端连接上。

目前,我们已经建立了一些侦听器,这些侦听器会在队列建立时提醒我们,然后我们重新启动工作器,但问题仍然存在。我们还可以为我们的Redis客户端设置超时,但是同样,这也不是理想的解决方案

  • 有没有其他人面对过这个?
  • 可能是什么问题?
  • 我们做错什么了吗?

我们的问题类似于使用redis实现消息队列中的错误,使用BLPOP中的错误,但我们没有得到任何错误。工人突然停了下来。

信息

Redishtml" target="_blank">服务器:2.8.2

PHP Redis:phpredis

更新#1

运行了很长时间的工作程序已停止处理队列。运行后,CLIENT LIST我们注意到这些工人与其他工人相比有较高的空闲时间,并且其标记设置为N而不是b。这可能是什么原因?

更新#2

问题出在哪里someFunction()。有一段代码导致该函数无法返回控制,这是由于客户端长时间处于空闲状态,因此在运行时显示“ N”标志CLIENT LIST


问题答案:

我建议验证是否存在问题, 如果 发现服务器端,
将该问题作为问题报告给Redis项目。但是,即使在堆栈的其他部分中,以下步骤也将帮助您解决问题(这很可能,因为没有与上述类似的已知问题)。

检查发生了什么的步骤:

  1. 等待一个客户端停止。
  2. 使用LLEN命令验证列表中是否确实有元素。
  3. 检查CLIENT LIST是否确实列出了您的客户端,执行阻止弹出窗口(您将看到命令名称),并检查回复的大小,以查看是否是您的客户端实际上没有消耗回复内容得到。

随机说明:

  1. Redis 2.8.2。太旧了,建议升级。
  2. 如果phpredis与Redis服务器一样旧,则可能存在可能导致此错误的错误。


 类似资料:
  • 触发spring boot REST服务后,该服务可以正常运行数小时,所有请求都可以正常工作,没有任何问题。发生的是,一段时间后,它随机地停止了。在查看日志时,我没有发现任何错误,除了应用程序已被销毁的信息。 一段时间后的日志 Maven依赖项 对于为什么spring boot REST API可能会停止有什么想法吗?我的maven依赖关系是根据演示的--而且它正在成功运行--这就是为什么服务在随

  • 我有4个Kafka和debezium一起运行。经过几天的良好运行后,三台kafka机器脱离网络一段时间,在< code > connect distributed . out 日志文件中,我收到了许多包含以下错误的消息: 我有4台Kafka机器,经纪人从0到3 动物园管理员: <代码>192.168.240.70 关注我的 - 除了之外,有相同的 指向安装 Kafka 的计算机的相同 IP,并且

  • 我有6个集装箱在码头群中运行。Kafka Zookeeper、MongoDB、A、B、C和接口。接口是来自公共的主要访问点-只有这个容器发布端口-5683。接口容器在启动期间连接到A、B和C。我使用docker组合文件docker堆栈部署,每个服务都有一个名称,用作接口的主机。一切都开始顺利,运转良好。过了一段时间(20分钟、1小时……),我无法向接口提出请求。接口接收到我的请求,但应用程序与服务

  • 我有一个片段,它设置一个列表视图,并创建一个处理程序来定期更新列表视图。然而,看起来处理程序在片段被销毁后仍然运行。 以下是代码。 在被销毁后更新会导致应用程序崩溃。如何在被销毁时使停止?我还想知道如果应用程序的任何暂停对也有什么影响。

  • 我们在让后台服务工作方面遇到了一些麻烦。即使在应用程序关闭和手机锁定的情况下,计时器也应该每秒执行一次代码。只要应用程序打开或在后台,手机正在使用,这就可以正常工作,但当手机被锁定并处于待机状态时,服务会在一段时间后自动停止。 代码是根据以下示例建模的:http://arteksoftware.com/backgrounding-with-xamarin-forms/ 然后,在PCL中: 最后,当

  • 使用Spring AMQP(使用RabbitMQ作为消息代理),我正在准备一个消息,并且我希望我的消息在有时之后被使用。在此之前,它可以在某个队列中等待,比如等待队列,然后移动到我们的主队列,在那里我们有消费者,它正在等待处理来自主队列的消息。 p.s>如果没有rabbitmq_delayed_message_exchange插件也可以。