Tag: 队列

使用Sidekiq进行活动作业并获取ActiveJob :: DeserializationError

我正在尝试使用Sidekiq来完成以下工作。 作业在没有排队(perform_now)时表现良好,但在调用(perform_later)时失败,后者使用Sidekiq。 AddEmployeesToRoomJob.perform_now room ## works fine AddEmployeesToRoomJob.perform_later room ## breaks in Sidekiq 错误: AddEmployeesToRoomJob JID-da24b13f405b1ece1212bbd5 INFO: fail: 0.003 sec 2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN: {“class”:”ActiveJob::QueueAdapters::SidekiqAdapter::JobWrapper”,”wrapped” :”AddEmployeesToRoomJob”,”queue”:”default”,”args”: [{“job_class”:”AddEmployeesToRoomJob”,”job_id”:”0ba5bd30-e281-49a7-a93f- 6e50445183ac”,”queue_name”:”default”,”priority”:null,”arguments”: [{“_aj_globalid”:”gid://dragonfly/Room/1″}],”locale”:”en”}],”retry”:true, “jid”:”da24b13f405b1ece1212bbd5″,”created_at”:1471704675.739077,”enqueued _at”:1471705036.6406531,”error_message”:”Error while trying to deserialize arguments: Couldn’t find Room with ‘id’=1″,”error_class”:”ActiveJob::DeserializationError”,”failed_at”:14717 04675.946183,”retry_count”:4,”retried_at”:1471705036.644416} 2016-08-20T14:57:16.645Z 19456 TID-owmym5fbk WARN: ActiveJob::DeserializationError: Error while trying to deserialize arguments: Couldn’t find […]

Resque:按用户顺序执行的时间关键作业

我的应用程序创建必须按用户顺序处理的resque作业,并且应尽可能快地处理它们(最大延迟1秒)。 例如:为user1创建job1和job2,为user2创建job3。 Resque可以并行处理job1和job3,但是应该按顺序处理job1和job2。 我对解决方案有不同的看法: 我可以使用不同的队列(例如queue_1 … queue_10)并为每个队列启动一个worker(例如rake resque:work QUEUE=queue_1 )。 用户在运行时被分配给队列/工作人员(例如,登录,每天等) 我可以使用动态“用户队列”(例如queue _#{user.id})并尝试扩展resque,一次只有1个worker可以处理队列(如Resque中所述:每个队列一个worker ) 我可以将作业放在非resque队列中,并使用“每用户元作业”和resque-lock( https://github.com/defunkt/resque-lock )来处理这些作业。 您是否有过在实践中遇到过其中一种情况的经历? 或者还有其他可能值得思考的想法吗? 我很感激任何意见,谢谢!

在不重新设置排队系统的情况下实施摘要电子邮件的最优雅方式是什么?

我有交易电子邮件系统设置,默认情况下,人们会在事件发生时收到电子邮件: class Comment after_create :email_original_poster def email_original_poster UserMailer.delay.notify_author_of_comment self end end 然而,不是收到电子邮件,我的一大部分用户更喜欢每日或每周摘要。 实现这一目标最干净最优雅的方法是什么? 我已经运行了delayed_job ,但这并不像是一个delayed_job工作,因为我正在排队需要执行操作的数据而不是需要执行的操作。 …没有重新发明排队系统 我知道明显的解决方案是queued_emails表,当然我可以这样做。 我问这个问题的原因是这样做是重新发明一个排队系统。 不仅有很多排队系统,但正如Percona这篇措辞好的post所指出的那样,最好不要自己动手: http://www.engineyard.com/blog/2011/5-subtle-ways-youre-using-mysql-as-a-queue-and-why-itll-bite-you/ 你有没有实现摘要邮件,你使用了delayed_job吗?你学到了什么?

在Rails中组织工作进程的最佳方法是什么?

我经常有一些代码应该按计划运行或作为带有一些参数的后台进程运行。 常见的元素是它们在调度进程之外运行,但需要访问Rails环境(可能还有传入的参数)。 有什么好办法组织这个以及为什么? 如果您想使用特定的插件或gem,请解释为什么您觉得它很方便 – 不要只列出您使用的插件。

resque中的问题:完成处理后,作业没有从队列中删除

我在rails应用程序中使用resque和resque-scheduler。 我在使用resque-scheduler时遇到了奇怪的问题。 一旦完成“执行”方法,我的一个工作就是不会从队列中删除。 我需要明确地将其删除以退出队列,然后队列中的其他作业开始执行。 工作类很简单,如: class FooJob @queue = :high_volume def self.perform puts “FooJob#perform:” # some method call end end resque_schedule.yml包含: add_jobs_from_foo: cron: “15 * * * *” class: FooJob description: “enqueue jobs from Foo” 它可能是gem版本的问题吗? 还是其他什么?

线程和队列

我有兴趣知道实现基于线程的队列的最佳方法是什么。 例如: 我有10个动作,我想用4个线程执行。 我想创建一个队列,其中所有10个动作都是线性放置的,并且用4个线程开始前4个动作,一旦一个线程完成执行,下一个将启动等 – 所以一次,线程的数量是4或小于4。