每个sidekiq工人有多种方法

Lau*_*ent 12 ruby-on-rails worker redis sidekiq

我不明白.

根据Sidekiq文档,每个worker(我的名为FeedWorker)只能包含一个名为perform的方法.那么,如果我想通过同一个工作者运行多个方法呢?

例如,我的FeedWorker(你猜对了,它处理一个活动源)应该运行以下3种方法:

announce_foo
announce_bar
invite_to_foo
Run Code Online (Sandbox Code Playgroud)

我不认为这是一种无理的期望.我相信其他人都考虑过这一点.我不是天才,但我知道我并没有在这里期待新的理由.然而,目前尚不清楚如何做到这一点.

现在,看起来我必须以这种方式编码:

def perform(id, TYPE)
  if TYPE == BAR
    Bar.find(id) and_announce_bar
  else
    Foo.find(id) and_announce_foo
  end
end
Run Code Online (Sandbox Code Playgroud)

无聊和丑陋的代码.那里一定有更好的.任何帮助赞赏!

Fab*_*ini 6

performmethod是您的Worker的入口点.在其中,您可以根据需要创建任意数量的实例方法,以便根据您的需要组织代码.尽管让工作人员代码尽可能地保持苗条,但这是一个很好的做法.例如,从内部调用其他对象是实现这一目标的一种方法.您会发现您的代码也更容易测试.