【问题标题】:How to control concurrency on sidekiq by model instance?如何通过模型实例控制sidekiq上的并发?
【发布时间】:2015-05-10 01:42:51
【问题描述】:

我有一个 Customer 模型和一个 Message 模型,并且在很多事情上都使用 Sidekiq。

每当我收到一条新消息时,我都会生成一个工作人员来记录该消息的信息,然后更新 Customer 的一些列。

我遇到的问题是,如果我一次收到一堆新消息,比如说其中的 10 条,那么当工作人员读取客户时,所有 10 条消息都会尝试根据客户的状态来更新客户。这导致了奇怪的问题。例如,每次客户从“关闭”状态变为“打开”时,我都需要增加一个计数器。所有 10 条消息同时生成并将客户读取为“已关闭”,然后所有 10 条消息都会触发客户从已关闭更改为打开,即使只有第一条消息应该触发该状态更改。所有其他消息都不应该做任何事情,因为客户已经打开了。

处理这种情况的正确方法是什么?

有没有办法指定sidekiq只在客户不同时才使用并发?

【问题讨论】:

    标签: ruby-on-rails sidekiq


    【解决方案1】:

    阅读 ActiveRecord 乐观和悲观锁定。

    【讨论】:

      猜你喜欢
      • 2013-03-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多