Sidekiq 更改参数或参数

问题描述 投票:0回答:2

我一直在寻找这个问题的解决方案。我尝试用谷歌搜索,但还没有找到任何东西。

问题:

我有这个工人

class MailWorker
  def perform(user_id)
    user = User.find(user_id)
    ...
  end
end

有时已经运行了很长时间。然后,需求发生变化,我们必须传递reservation_id而不是user_id。

因此工作人员更新为:

class MailWorker
  def perform(reservation_id)
    reservation = Reservation.find(reservation_id)
    ....
  end
end

问题是,如果我们推送此代码,一些工作人员已经在 Q 中。因此,这些工作人员将尝试找到用户,但新代码正在使用事务。

对此最好的方法是什么?我们是否必须创建新的 Worker 而不是使用现有的 Worker,并在安全后删除旧的 Worker?或者有什么办法可以解决这个问题吗?

谢谢

ruby-on-rails sidekiq
2个回答
4
投票

我会亲自为此创建一个新的 Worker。

这使得处理所有工作变得更加容易。 (并且向后兼容)


0
投票

我遇到了同样的问题,并且问题已升级到生产环境。根据我的学习,您可以使用两种方法。

  1. 创建一个新的工人阶级(最安全的)
  2. 添加具有默认值的新参数。

我已将详细信息记录在我的个人笔记中

https://rslhdyt.dev/til-handling-changes-to-sidekiq-worker-class/

© www.soinside.com 2019 - 2024. All rights reserved.