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

Sidekiq不处理队列

柯曦
2023-03-14
问题内容

Sidekiq可以阻止哪些可能的原因来处理队列中的作业?队列已满。日志文件sidekiq.log表明完全没有活动。因此,队列已满,但日志为空,Sidekiq似乎未处理项目。似乎没有工人在处理工作。重新启动Redis或用FLUSHALL或FLUSHDB冲洗均无效。Sidekiq已开始于

捆绑执行程序sidekiq -L log / sidekiq.log

并生成以下日志文​​件:

2013-05-30..Booting Sidekiq 2.12.0 using redis://localhost:6379/0 with options {}
2013-05-30..Running in ruby 1.9.3p374 (2013-01-15 revision 38858) [i686-linux]
2013-05-30..See LICENSE and the LGPL-3.0 for licensing details.
2013-05-30..Starting processing, hit Ctrl-C to stop

您如何找出问题所在?是否有隐藏的日志文件?


问题答案:

原因是在我们的案例中:Sidekiq可能查找错误的队列。默认情况下,Sidekiq使用名为“默认”的队列。我们使用了两个不同的队列名称,并在config /
sidekiq.yml中定义了它们。

# configuration file for Sidekiq
:queues:
  - queue_name_1
  - queue_name_2

问题在于,默认情况下,此配置文件 不会 在您的开发环境中通过简单的命令 自动加载
(不同于database.ymlthinking_sphinx.yml例如)bundle exec sidekiq。因此,我们将作业写在两个特定的队列中,而Sidekiq正在等待第三个队列(默认队列)中的作业。您必须通过-C--config选项将路径作为参数传递到配置文件:

bundle exec sidekiq -C ./config/sidekiq.yml

或者,您可以直接传递队列名称(逗号后在此处不允许空格):

bundle exec sidekiq -q queue_name_1,queue_name_2

要找出问题所在,也可以通过选项-v--verbose在命令行中传递或在文件中使用是很有帮助:verbose: truesidekiq.yml。如果未加载配置文件,则配置文件中定义的所有内容当然都是无用的。因此,请确保首先使用正确的配置文件。



 类似资料:
  • 目前我正在使用SQS-Lambda集成 Lambda的并发可用。SQS批次设置为1记录,0延迟。 SQS的可见性超时为15分钟,Lambda最大执行时间为15分钟 我会注意到,有时SQS消息在飞行中被卡住,根本没有被任何Lambda处理(它们在15分钟后落入死信队列,CloudWatch显示没有Lambda被消息调用) 有人面临过同样的问题吗? 我在VPC内部运行Lambda,如果这很重要的话

  • 问题内容: 下午好, 我有两个单独的但相关的应用程序。它们都应具有自己的后台队列 (请参阅:独立的Sidekiq和Redis进程) 。但是,我偶尔希望能够将作业从推送到的队列中。 从简单的队列/推送角度来看,如果没有现有的Sidekiq / Redis堆栈,则很容易做到这一点: 但是,考虑到我本来会调用a 和from ,那么在这之间可能需要一步。 显然,我可以直接从Sidekiq内部获取序列化和规

  • Sidekiq 为 Rails 3 应用程序提供一个高效的消息队列系统。 使用方法: 1. 首先将 worker 类放到 app/workers: class HardWorker  include Sidekiq::Worker  def perform(name, count)    # do something  endend 2. 在控制器 action 或者 model 中调用 Hard

  • 问题内容: Python的多处理程序包中的队列和管道之间的根本区别是什么? 在什么情况下应该选择一种?什么时候使用比较有利?什么时候使用比较有利? 问题答案: A只能有两个端点。 一个可以有多个生产者和消费者。 何时使用它们 如果您需要两个以上的交流点,请使用。 如果您需要绝对的性能,那么a会更快,因为它建立在之上。 绩效基准 假设您要生成两个进程并在它们之间尽快发送消息。这些是使用和进行类似测试

  • 问题内容: 我正在尝试在Python中的多处理库中使用队列。执行下面的代码后(打印语句起作用),但是在调用Queue上的join之后,这些进程没有退出,并且仍然存在。我如何终止其余过程? 谢谢! 问题答案: 尝试这个:

  • 我有两个消费者(不同的应用程序)连接到Azure队列。我可以或消息,在消费过程中,我可以或消息。裁判:http://msdn.microsoft.com/en-us/library/azure/hh851750.aspx. 我确定我想使用,然后消息,因为我希望它们在两个应用程序中被接收。我想我应该将队列上的消息生存期设置为10秒,作为删除机制。 然而,由于消息似乎在10秒钟后被删除,因此在这10秒